Ik heb een site gemaakt ( [rml][ ruiltopic] discussie over flexruilen.nl[/rml] ) en zit met een probleem: Hoe voeg ik een zoek functie toe?
Natuurlijk maak ik gebruik van MySQL. Ik heb de volgende pagina gemaakt als testpagina om te zien of het werkt, wat het niet doet (Let op: Het is dus nog geen schoonheidspagina!):
Dit om alleen in de titel te zoeken. Ik gebruik hier dus LIKE, maar zag o.a. in de FAQ ook een nieuwere (betere?) manier van zoeken staan. Echter aan die nieuwe manier zitten een paar problemen:
1) Bij 50% van de resultaten wordt 0 teruggegeven. Dit is vervelend. Zoals je ziet gaat het om een advertentie website. Stel, je wilt in de rubriek "netwerken" zoeken naar een "switch". Goede kans dat in die rubriek 70% switches zijn, 10% hubs, en 20% netwerkkaarten. Ik zou dan alsnog wél 70% willen laten weergeven, er is dan immers toch nog 30% uitgefilterd.
Hier vind je het script overigens:
http://www.flexruilen.nl/...briekid=8&zoektekst=sdram
Dit geeft 0 rijen terug. In deze soort zoekfunctie schijnt het dat die ook leeg mag zijn, die "nieuwe" functie moet minimaal 3 karakters hebben.
Om het zoeken te beperkten dacht ik aan het opgeven van bijvoorbeeld LIMIT 50. Ik wil ook meerdere pagina's maken, ik ga nu opzoeken hoe dat in elkaar steekt, ik denk heel simpel. Zo beperkt ik dan alsnog mijn resultaten. Ook beperkt ik ze door te selecteren op type, groep en rubriek. Ik krijg geen fout van mysql, maar zou het dan toch niet mogen, omdat ik niets terugkrijg? RUbriek 8 is bijvoorbeeld geheugen, met 4 rijen, waarin in maar 1 rij het woord "sdram" voorkomt. Waarom krijg ik geen resultaat terug?
edit:
Nog fijne kerst, ik zal pas later vandaag kunnen reageren
edit2:
PHPmyadmin doet het ook; het lijkt wel alsof mysql geen LIKE en = tegelijk kan hebben? Ik draai versie 4.0.20 overigens.
O ja, ik heb als tabellen InnoDB. Ik had namelijk gelezen, ik denk op de MySQL site, dat deze crash bestendig waren. Ook zijn ze beter als je iets tegelijk doet ofzo bij het aanpassen van een rij, iig was het nodig bij de database van PowerDNS, m'n DNS server.
Die nieuwe tekstzoekfunctie wil myisam tabellen. Welke tabel kan ik het beste nemen?
Natuurlijk maak ik gebruik van MySQL. Ik heb de volgende pagina gemaakt als testpagina om te zien of het werkt, wat het niet doet (Let op: Het is dus nog geen schoonheidspagina!):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
| <? if (empty($_GET['soort_ad'])){ die ('Oeps, geen type gezet...'); } if (empty($_GET['groepid'])){ die ('Oeps, geen groep ID gekozen...'); } if (empty($_GET['rubriekid'])){ die ('Oeps, geen rubriek ID gekozen...'); } if (empty($_GET['zoektekst'])){ #die ('Geen zoekopdracht opgegeven.'); } else { $_GET['zoektekst'] = ''; } $soort_ad = addslashes($_GET['soort_ad']); $groepid = addslashes($_GET['groepid']); $rubriekid = addslashes($_GET['rubriekid']); $zoektekst = addslashes($_GET['zoektekst']); if (($soort_ad != 'aangeboden') AND ($soort_ad != 'gevraagd')){ die ('U heeft geen juiste soort advertentie gekozen (aangeboden / gevraagd)'); } # $query_zoek = mysql_query("SELECT * FROM `".$tabel_advertenties."` WHERE groep='".$groepid."' AND rubriek='".$rubriekid."' AND type='".$soort_ad."' AND titel LIKE '%".$zoektekst."&' ORDER by date DESC"); $rows_zoek = mysql_num_rows($query_zoek); if($rows_zoek == 0){ echo 'Geen artikelen gevonden.'; } echo ' <table width="600" border="0" cellspacing="0" cellpadding="1"> <tr bgcolor="#FFEC00"> <td width="310">Product</td> <td width="63">Te ruil</td> <td width="62">Prijs</td> <td width="80">Datum</td> <td width="75">Bekeken</td> </tr> '; $tablekleur = 0; while($disp_zoek = mysql_fetch_array($query_zoek)){ if (empty($disp_zoek['date'])){ $geplaatst_op = 'Database error!'; } else { $geplaatst_op = date("d-m-Y", $disp_zoek['date']); } if ($disp_zoek['teruil'] == 0){ $teruil = '-'; } else { $teruil = 'Ja'; } if ($disp_zoek['tekoop'] == 0){ $tekoop = '-'; } elseif ($disp_zoek['tekoop'] == 1){ if ($disp_zoek['prijs'] == 0){ $tekoop = 'TEAB'; } else { $tekoop = '€ '.$disp_zoek['prijs']; } } if ($tablekleur == 0){ $tablekleur_number = '#F5F5F5'; $tablekleur++; } else { $tablekleur_number = '#FFFFFF'; $tablekleur = 0; } echo '<tr onMouseOver="this.bgColor = \'#E1F9FF\'" onMouseOut ="this.bgColor = \''.$tablekleur_number.'\'" bgcolor="'.$tablekleur_number.'" onclick="location.href=\'index.php?page=bekijk_advertentie&type='.$soort_ad.'&id='.$disp_zoek['id'].'\'" style="cursor: pointer"> <td>'.$disp_zoek['titel'].'</td> <td>'.$teruil.'</td> <td>'.$tekoop.'</td> <td>'.$geplaatst_op.'</td> <td>'.$disp_zoek['bekeken'].'</td></tr>'; } echo '</table'; ?> |
Dit om alleen in de titel te zoeken. Ik gebruik hier dus LIKE, maar zag o.a. in de FAQ ook een nieuwere (betere?) manier van zoeken staan. Echter aan die nieuwe manier zitten een paar problemen:
1) Bij 50% van de resultaten wordt 0 teruggegeven. Dit is vervelend. Zoals je ziet gaat het om een advertentie website. Stel, je wilt in de rubriek "netwerken" zoeken naar een "switch". Goede kans dat in die rubriek 70% switches zijn, 10% hubs, en 20% netwerkkaarten. Ik zou dan alsnog wél 70% willen laten weergeven, er is dan immers toch nog 30% uitgefilterd.
Hier vind je het script overigens:
http://www.flexruilen.nl/...briekid=8&zoektekst=sdram
Dit geeft 0 rijen terug. In deze soort zoekfunctie schijnt het dat die ook leeg mag zijn, die "nieuwe" functie moet minimaal 3 karakters hebben.
Om het zoeken te beperkten dacht ik aan het opgeven van bijvoorbeeld LIMIT 50. Ik wil ook meerdere pagina's maken, ik ga nu opzoeken hoe dat in elkaar steekt, ik denk heel simpel. Zo beperkt ik dan alsnog mijn resultaten. Ook beperkt ik ze door te selecteren op type, groep en rubriek. Ik krijg geen fout van mysql, maar zou het dan toch niet mogen, omdat ik niets terugkrijg? RUbriek 8 is bijvoorbeeld geheugen, met 4 rijen, waarin in maar 1 rij het woord "sdram" voorkomt. Waarom krijg ik geen resultaat terug?
edit:
Nog fijne kerst, ik zal pas later vandaag kunnen reageren
edit2:
PHPmyadmin doet het ook; het lijkt wel alsof mysql geen LIKE en = tegelijk kan hebben? Ik draai versie 4.0.20 overigens.
O ja, ik heb als tabellen InnoDB. Ik had namelijk gelezen, ik denk op de MySQL site, dat deze crash bestendig waren. Ook zijn ze beter als je iets tegelijk doet ofzo bij het aanpassen van een rij, iig was het nodig bij de database van PowerDNS, m'n DNS server.
Die nieuwe tekstzoekfunctie wil myisam tabellen. Welke tabel kan ik het beste nemen?
[ Voor 52% gewijzigd door pierre-oord op 25-12-2004 13:08 ]
Ondernemer in tech (oud LOQED.com, nu UpToMore.com)