[PHP/MySQL] - Zoek query lijkt wildcards niet te pakken.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • enveekaa
  • Registratie: September 2003
  • Laatst online: 06:09
Ik zit met het volgende,

Ik heb een MySQL database met meerdere velden en heb een query die deze 2 velden doorzoekt op een bepaalde waarde.

Het zoeken gaat op zicht goed, maar als ik bijvoorbeeld zoek op "gasleiding 8mm" dan krijg ik een ander resultaat dan dat ik zoek op "8mm gasleiding", dit heeft natuurlijk te maken met het feit dat er wordt gezocht naar de gehele string.

Dit dacht ik op te lossen door de string zo aan te passen dat MySQL elk woord uit de string zou zien als een losse wildcard. Code staat hieronder:

PHP:
1
2
3
$zoeknaar = "gasleiding 8mm";
$zoeknaar = "%". $zoeknaar ."%";
$zoeknaar = str_replace(" ","% %",$zoeknaar);

Dit maakt van "gasleiding 8mm" -> "%gasleiding% %8mm%"
De query die ik vervolgens gebruik is:
PHP:
1
2
3
4
5
6
7
8
9
$query = "
SELECT 
mar_artikelcode, mar_omschrijving1, mar_omschrijving2 
FROM artikelen
WHERE 
mar_omschrijving1 LIKE '$zoeknaar' 
OR 
mar_omschrijving2 LIKE '$zoeknaar'
";


Toch blijf ik verschillende resultaten krijgen.. heeft iemand suggesties of ervaring met dergelijke zoek scripts?

Alvast bedankt!
Nick

Acties:
  • 0 Henk 'm!

  • Willem
  • Registratie: Februari 2001
  • Laatst online: 18-09 15:13
Dan moet je toch echt bij de buren zijn. :)

Acties:
  • 0 Henk 'm!

  • enveekaa
  • Registratie: September 2003
  • Laatst online: 06:09
Uhrm, de buren? :) Oh begrijp em .. "al"...

Foute opmerking zeg :) hahaha

[ Voor 63% gewijzigd door enveekaa op 10-12-2004 13:08 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

De buren dus : Programming & Webscripting :)

Daarnaast zul je denk je per zoekwoord een like moeten maken i.p.v. alle worden in 1 like te zetten. En zoek ook eens op FullText search of fulltext index hier op GoT of google :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • enveekaa
  • Registratie: September 2003
  • Laatst online: 06:09
Hmm je dan moet ik de zoekstring dus verdelen per woord?


Ik had em toch in Programming & Webscripting gezet? :) Nick

Acties:
  • 0 Henk 'm!

Verwijderd

echo je query eens? Daarnaast lijkt mij "%gasleiding% %8mm%" een beetje onzin dat zou gewoon zo kunnen: "%gasleiding%8mm%" Verder kan je losse woorden beter splitsen en opgeven of ze via OR of AND willen zoeken en word je query bijvoorbeeld:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT  
    mar_artikelcode, mar_omschrijving1, mar_omschrijving2  
FROM
    artikelen 
WHERE  
    (
    mar_omschrijving1 LIKE '%gasleiding%'
    AND
    mar_omschrijving1 LIKE '%8mm%'
    )
OR  
    (
    mar_omschrijving2 LIKE '%gasleiding%'
    AND
    mar_omschrijving2 LIKE '%8mm%'
    )

[ Voor 10% gewijzigd door Verwijderd op 10-12-2004 13:30 ]


Acties:
  • 0 Henk 'm!

  • enveekaa
  • Registratie: September 2003
  • Laatst online: 06:09
@Sooterd: ja die variatie hadik ook al bedacht :) alleen hoe splits ik dan de opgegeven zoekstring op??

Acties:
  • 0 Henk 'm!

Verwijderd

explode op een spatie en dan in een lusje je voorwaarden opbouwen...

Acties:
  • 0 Henk 'm!

  • enveekaa
  • Registratie: September 2003
  • Laatst online: 06:09
Ok is gelukt.. nu heb ik nog steeds op 1 of andre manier niet dezelfde resultaten..
code:
1
2
3
4
5
6
7
8
9
10
11
12
$query = "
        SELECT 
        mar_artikelcode, mar_omschrijving1, mar_omschrijving2 
        FROM artikelen
        WHERE 
        mar_omschrijving1 LIKE '$zoekString1' 
        OR 
        mar_omschrijving2 LIKE '$zoekString1'
        AND
        mar_omschrijving1 LIKE '$zoekString2' 
        OR
        mar_omschrijving2 LIKE '$zoekString2'";

Nu wijken we zoekresulaten dus toch af..

Acties:
  • 0 Henk 'm!

  • Vaudtje
  • Registratie: April 2002
  • Niet online
enveekaa schreef op vrijdag 10 december 2004 @ 15:07:
Nu wijken we zoekresulaten dus toch af..
Ik zou er eens een SQL Leerboekje op naslaan, want je vragen zijn vrij elementair imho.
O ja, lees het stukkie FAQ over SQL insertion nog even door :)
Wat betreft je query: Haakjes zijn erg belangerijk als je boolean operators gaat mixen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$query = "
        SELECT 
        mar_artikelcode, mar_omschrijving1, mar_omschrijving2 
        FROM artikelen
        WHERE 
(
        mar_omschrijving1 LIKE '$zoekString1' 
        OR 
        mar_omschrijving2 LIKE '$zoekString2'
)
        AND
(
        mar_omschrijving1 LIKE '$zoekString1' 
        OR
        mar_omschrijving2 LIKE '$zoekString2'
)
";

[ Voor 13% gewijzigd door Vaudtje op 10-12-2004 15:16 ]

In deeze zin staan drie fauten


Acties:
  • 0 Henk 'm!

  • enveekaa
  • Registratie: September 2003
  • Laatst online: 06:09
Met haakjes werkt helemaal niet....
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        $query = "
        SELECT mar_artikelcode, mar_omschrijving1, mar_omschrijving2 
        FROM artikelen
        WHERE {
            mar_omschrijving1 LIKE '$zoekString1' 
            OR 
            mar_omschrijving2 LIKE '$zoekString1'
            }
        AND {
            mar_omschrijving1 LIKE '$zoekString2' 
            OR
            mar_omschrijving2 LIKE '$zoekString2'
        }
        ";

Acties:
  • 0 Henk 'm!

Verwijderd

dat zijn accolades :)

Acties:
  • 0 Henk 'm!

  • enveekaa
  • Registratie: September 2003
  • Laatst online: 06:09
right.. /negeer mij

Dat was het inderdaad zeg, 2 van die rottige haakjes..
Bedankt voor de tips! het werkt nu vlekkeloos :)

Nick

[ Voor 76% gewijzigd door enveekaa op 10-12-2004 15:38 ]

Pagina: 1