$score = array();
foreach($zoekterm_array as $zoekterm)
{
$result = mysql_query("SELECT *,
COUNT(*) AS occurrences FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm\"
GROUP BY p.page_id
ORDER BY occurrences DESC
LIMIT 0, 5" );
iemand een idee wat er met bovenstaande code mis is ?
PROBLEEM 2
met behulp van onderstaande code haal ik "categorie" uit de resultaten naar boven, echter wil ik naast categorie ook "omschrijving" en "link" uit de resultaten halen.
Het lukt me niet om de gegevens naar het scherm te schrijven...hoe ze op het scherm verschijnen doet er nu even niet toe, als ze dus maar verschijnen.
het onderstaande werkt prima, maar laat dus alleen maar 1 waarde zien.
Echter kan ik ipv key en value geen andere waarden invullen ivm de each functie...iemand een idee hoe ik dit op moet lossen of welke functie ik kan gebruiken om alles naar het scherm te schrijven ?
Even een paar vraagjes:
- Wat wil je nu precies op het scherm hebben?
- Waarom gebruik je een for-lus daar waar een while-lus voor de hand ligt?
- Waarom ga je met arsort() sorteren wanneer je in de query eenvoudig kunt sorteren?
- Waarom neem jij aan dat de query altijd lukt? Je hebt de garantie dat dit niet het geval is.
ik haal uit de query resultaten op waaronder "categorie", "omschrijving" , "link" etc.
deze resultaten zijn al gesorteerd op relevantie (ORDER BY occurrences DESC), echter als men zoekt met meerdere zoektermen klopt de relevantie niet.
Zoekt men bijvoorbeeld op "leuke fietsen" dan ranken resultaten met het woord "leuke" hoger dan resultaten met de woorden "leuke fietsen" en dat is natuurlijk niet de bedoeling!
Vandaar ook dat er nog een extra score aan gehangen word.
het is de bedoeling dat de score berekend word adhv de resultaten en deze netjes naar het scherm worden geschreven.
Echter heb ik nu dus 2 problemen:
1. de foutmelding : undefined index
2. het lukt me alleen om 1 onderdeel van het resultaat naar het scherm te schrijven met daarachter de score. dit omdat ik door de each functie alleen met value en key kan werken voor zover ik weet.
Ik moet dus een andere functie gebruiken, heb er al veel over gepiekerd, maar ik heb werkelijk waar geen idee hoe ik dit moet doen.
de query zelf werkt goed, deze heb ik in php myadmin uitgebreid getest...of doelde je op de foutafhandeling ?
dat met de for lus en while lus begrijp ik niet helemaal, waarom ligt een while lus daar voor de hand ?
echter als men zoekt met meerdere zoektermen klopt de relevantie niet.
In dat geval is de query dus niet goed. Een query is niets meer dan een vraag waar jij een correct antwoord op wilt krijgen. Wanneer dan het antwoord niet overeenkomt met datgene dat jij verwacht, dan is de vraag niet goed gesteld of er ontbreken gegevens.
Jij probeert nu een deel van de vraag op te lossen in php. Dat maakt de boel onnodig ingewikkeld en zal waarschijnlijk leiden tot een lapmiddel. Ga dus nog eens heel goed kijken hoe je de query moet opstellen om wél het juiste antwoord te krijgen.
En wat betreft het mislukken van de query, daar heb ik het inderdaad over de foutafhandeling. De query kan nog zo goed zijn, dat zegt helemaal niets over de beschikbaarheid van de database.
ik begrijp je punt en heb er ook wel degelijk over nagedacht. Ik heb nu na lang denken het volgende gemaakt (zie onderstaande code). Dit werkt op zich prima alleen geeft hij de resultaten maar voor 80% goed weer.
Nu zoek ik in onderstaand voorbeeld dus op "batavus fietsen". nu komt het voor dat een resultaat met daarin "batavus fietsen" lager op de resultaten lijst staat dan een resultaat met 3x het woord "fietsen"...ik wil dit dus voorkomen / oplossen en wil resultaten die alle zoekwoorden bevatten bovenaan hebben in de resultaten, maar heb echt geen idee hoe ik dat moet doen...
zou je me een beetje op weg kunnen helpen ?
<?php
$zoekwoorden = 'batavus fietsen';
$zoekterm = explode(" ", $zoekwoorden);
$query = "SELECT categorie, leeftijd, naam, naamsite, omschrijving, url, website, woonplaats,
soort, ctags, atags, tags,
COUNT(*) AS occurrences FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm[0]\"
GROUP BY p.page_id
ORDER BY occurrences DESC
LIMIT 0, 200";
for($i = 1;$i < count($zoekterm); $i++)
{
$query = "SELECT categorie, leeftijd, naam, naamsite, omschrijving, url, website, woonplaats,
soort, ctags, atags, tags,
COUNT(*) AS occurrences FROM page p, word w, occurrence o
WHERE p.page_id = o.page_id AND
w.word_id = o.word_id AND
w.word_word = \"$zoekterm[$i]\"
GROUP BY p.page_id
ORDER BY occurrences DESC
LIMIT 0, 200";
}
$res = mysql_query($query) or trigger_error(mysql_error());
if ($res == 0)
{
//Display a no pages found page
}