Ik heb een script vervaardigd door Ger van Steenderen:

<?php
function match_Combo_zoeken($een, $twee, $drie, $vier, $vijf) {

global $match_zoeken;

$match_zoeken = $mysqli->query("SELECT
vid.id,
v.Naam_Functie,
Locatie,
COUNT(*) AS total_matches,
GROUP_CONCAT(vid.matched_word) AS matched_words
FROM
(SELECT
id,
'$een' AS matched_word
FROM
vacatures
WHERE
Naam_Functie LIKE '%$een%'
UNION
SELECT
id,
'$twee' AS matched_word
FROM
vacatures
WHERE
Locatie LIKE '%$twee%'
UNION
SELECT
id,
'$drie' AS matched_word
FROM
vacatures
WHERE
Functie_Omschrijving LIKE '%$drie%'
UNION
SELECT
id,
'$vier' AS matched_word
FROM
vacatures
WHERE
Werkervaring LIKE '%$vier%'
UNION
SELECT
id,
'$vijf' AS matched_word
FROM
vacatures
WHERE
Arbeidsvoorwaarden LIKE '%$vijf%'
) AS vid
INNER JOIN
vacatures AS v
ON
vid.id = v.id
GROUP BY vid.id
ORDER BY total_matches DESC"); }
?>

Dan heb ik inputs:
<?php
if (isset($_POST['match_zelf'])) {

if (isset($_POST['match_functie']) || isset($_POST['match_locatie']) ||
isset($_POST['match_omschrijving']) || isset($_POST['match_eisen']) ||
isset($_POST['match_voorwaarden'])) {

$match_functie = $_POST['match_functie'];
$match_locatie = $_POST['match_locatie'];
$match_omschrijving = $_POST['match_omschrijving'];
$match_eisen = $_POST['match_eisen'];
$match_voorwaarden = $_POST['match_voorwaarden'];
}
$perc = match_Combo_zoeken($match_functie , $match_locatie, $match_omschrijving, $match_eisen, $match_voorwaarden);
}
?>

Dan haal ik zo de gegevens op:

<?php
if (isset($match_zoeken)) {
if ($match_zoeken->num_rows > 0) {
$_SESSION['matched_words'] = array();
//echo (5 / $result3->num_rows) * 25;
echo "<center style='text-align: center;'>Er zijn " . $match_zoeken->num_rows . " vacatures gevonden.</center><br />";
while ($row3 = $match_zoeken->fetch_object())

{

//
echo "<tr style='border: 1px solid black;'>";
echo "<td>Werkervaring, Locatie, Functie<br /></td>";
//echo "<td valign='top'><br /><b>Functie omschrijving:</b><br /></td>";
echo "<td style='border: 1px solid black;'>".$row3->Locatie."<br /></td>";
echo "<td style='border: 1px solid black;'><a href='vacaturematch.php?id=$row3->id'>" . $row3->Naam_Functie . "</a><br /></td>";
echo "<td style='border: 1px solid black;'>" . $row3->id . "</td>";
echo "<td style='border: 1px solid black;'>" . $row3->total_matches . "</td>";
echo "<td style='border: 1px solid black;'>" . $row3->matched_words . "</td>";
$_SESSION['matched_words'][$row3->id] = $row3->matched_words;

echo "</tr>";
}
?>

Maar als ik alles leeg laat bijvoorbeeld, dan
krijg ik total_matches 1, een ontzichtbare woord bij matched_words.

Hoe kan dit in hemelsnaam?



[size=xsmall]Toevoeging op 19/12/2012 10:55:36:[/size]

laat maar heb t al
En zoek nu alle problemen....
- '' AS matched_word
- LIKE %''%
Het probleem zou waarschijnlijk liggen aan dat die toch legen velden pakt in de query
dit zou weg moeten:

SELECT id, '' AS matched_word FROM vacatures WHERE Locatie LIKE %''% UNION SELECT id, '' AS matched_word FROM vacatures WHERE Functie_Omschrijving LIKE %''% UNION SELECT id, '' AS matched_word FROM vacatures WHERE Werkervaring LIKE %''% UNION SELECT id, '' AS matched_word FROM vacatures WHERE Arbeidsvoorwaarden LIKE %''%
Lege velden moet je in elk geval niet op zoeken, kost je alleen maar tijd en levert nooit goede resultaten op.
Verder zit er een fout in het gebruik van de wildcards. Je hebt nu %'piping'%. Maar die wildcards zijn onderdeel van de zoekstring en moeten dus binnen de quotes: '%piping%'
Er stonden inderdaad wat foutjes in het script, heb ze even aangepast.
En regel 35 en 36 moet je dan herhalen voor alle vijf de zoekvelden.
Ja man (denk dat het werkt) dit heb ik veranderd:
<?php
$things_to_match = array();
if (isset($_POST['match_functie']) && trim($_POST['match_functie']) != '' ||
isset($_POST['match_locatie']) && trim($_POST['match_locatie']) != '' ||
isset($_POST['match_omschrijving']) && trim($_POST['match_omschrijving']) != '' ||
isset($_POST['match_eisen']) && trim($_POST['match_eisen']) != '' ||
isset($_POST['match_voorwaarden']) && trim($_POST['match_voorwaarden']) != '')
{
$things_to_match['Naam_Functie'] = $mysqli->real_escape_string($_POST['match_functie']);
$things_to_match['Locatie'] = $mysqli->real_escape_string($_POST['match_locatie']);
$things_to_match['Functie_Omschrijving'] = $mysqli->real_escape_string($_POST['match_omschrijving']);
$things_to_match['Werkervaring'] = $mysqli->real_escape_string($_POST['match_eisen']);
$things_to_match['Arbeidsvoorwaarden'] = $mysqli->real_escape_string($_POST['match_voorwaarden']);
?>
Naar
<?php
if (isset($_POST['match_functie']) && trim($_POST['match_functie']) != '') {
$things_to_match['Naam_Functie'] = $mysqli->real_escape_string($_POST['match_functie']); }
if (isset($_POST['match_locatie']) && trim($_POST['match_locatie']) != '') {
$things_to_match['Locatie'] = $mysqli->real_escape_string($_POST['match_locatie']); }
if (isset($_POST['match_omschrijving']) && trim($_POST['match_omschrijving']) != '') {
$things_to_match['Functie_Omschrijving'] = $mysqli->real_escape_string($_POST['match_omschrijving']); }
if (isset($_POST['match_eisen']) && trim($_POST['match_eisen']) != '') {
$things_to_match['Werkervaring'] = $mysqli->real_escape_string($_POST['match_eisen']); }
if (isset($_POST['match_voorwaarden']) && trim($_POST['match_voorwaarden']) != '') {
$things_to_match['Arbeidsvoorwaarden'] = $mysqli->real_escape_string($_POST['match_voorwaarden']); }
?>

[size=xsmall]Toevoeging op 20/12/2012 13:11:40:[/size]

Alleen word 'gewicht' geven nu moeilijk?
Valt wel mee denk, kan de gebruiker dit zelf aangeven, of bepaal jij dat zelf?
Eigenlijk beide, ik match op twee manieren
1. de automatische match gebaseerd op een cv (cv krijg je voor je klikt op match en dan maakt die een match-report.
2. en de zelf match dus wat er in de bovenste code gebeurd met inputs(zoals boven).

Ik had zelf misschien al een idee, maar nog niet goed over nagedacht, namelijk zo:
foreach($words as $field => $word) {
if $word = 'autocad' dan score = 3 }
Dus ja eigenlijk voor beide want dat gaat misschien van toepassing komen in de toekomst.
Ik kan hier morgen pas echt over reageren.

Maar je hulp (al meer dan bewezen) is welkom!

[size=xsmall]Toevoeging op 21/12/2012 12:10:38:[/size]

Nou wil ik voor een paar tekstvelden, met een spatie, meerdere woorden matchen:
zoiets:

$match_eisen = explode(" ", $_POST['match_eisen']);

Hoe ga ik van hier verder?

Reageren