Beste tweakers
Ik heb een script, maar ik ben er niet echt tevreden over...
Het moet sneller/beter kunnen, maar ik zie/snap het niet helemaal.
Ik dacht het slim aan te pakken door een array te gebruiken in de query, maar ik snap het gebruik van een array in een query niet helemaal.
Aangepast script:
Maar met het eerste script krijg ik veel meer resultaten dan met het tweede script.
Ik heb een script, maar ik ben er niet echt tevreden over...
Het moet sneller/beter kunnen, maar ik zie/snap het niet helemaal.
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
| //Voor elk zoekwoord apart een query aanroepen. for($i=0; $i<$aantalKeyWords; $i++) { //Alle pagina ID's uit de db halen die overeen komen met het zoekwoord. $query = "SELECT pages.Id AS id FROM keywords, pagekeywords, pages WHERE keywords.Word LIKE '%$arrayKeyWords[$i]%' AND pagekeywords.WordId=keywords.Id AND pages.Id=pagekeywords.PageId"; $zoekWordId = mysql_query($query) or die ("ack! query failed: " ."<li>errorno=".mysql_errno() ."<li>error=".mysql_error() ."<li>query=".$query); //unieke nieuwe array maken voor vergelijking. $$aantalKeyWords[$i] = array(); while($row = mysql_fetch_array($zoekWordId)) { //alle pagina id's in een array stoppen. array_push($$aantalKeyWords[$i], "$row[id]"); } //alle array's samenvoegen. array_push($arraySchoon, $$aantalKeyWords[$i]); } //de eerste array pakken om te gaan vergelijken. $resultId = $arraySchoon[0]; for($i=1; $i<count($arraySchoon); $i++) { //elke array word vergeleken en alleen de pagina id's die in beide voorkomen worden opgeslagen. $resultId = array_intersect($resultId, $arraySchoon[$i]); } //alle dubbele waardes worden eruit gegooid. $resultId2 = array_values(array_unique($resultId)); $AantalGevonden = count($resultId2); //String maken voor een volgende query. $stringId = implode($resultId2, "'||Id='"); |
Ik dacht het slim aan te pakken door een array te gebruiken in de query, maar ik snap het gebruik van een array in een query niet helemaal.
Aangepast script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| //Alle pagina ID's uit de db halen die overeen komen met de zoekwoorden uit de array. $query = "SELECT pages.Id AS id FROM keywords, pagekeywords, pages WHERE keywords.Word LIKE '%$arrayKeyWords%' AND pagekeywords.WordId=keywords.Id AND pages.Id=pagekeywords.PageId"; $zoekWordId = mysql_query($query) or die ("ack! query failed: " ."<li>errorno=".mysql_errno() ."<li>error=".mysql_error() ."<li>query=".$query); $resultId = array(); while($row = mysql_fetch_array($zoekWordId)) { //alle pagina id's in een array stoppen. array_push($resultId, "$row[id]"); } //alle dubbele waardes worden eruit gegooid. $resultId2 = array_values(array_unique($resultId)); $AantalGevonden = count($resultId2); $stringId = implode($resultId2, "'||Id='"); |
Maar met het eerste script krijg ik veel meer resultaten dan met het tweede script.