[PHP+MySQL] Zoekfunctie

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Hallo,

Ik ben bezig met een zoek functie waarin ik het mogelijk wil maken om AND en OR te gebruiken. Maar wanneer ik dit probleem probeer op te lossen is mijn intelligentie een beperkende factor. Ik kom er dus niet uit. Ik kan geen manier vinden om een string als dit:

Ate AND bier OR union

om te zetten tot dit:

WHERE
(naam LIKE '%Ate%' OR omschrijving LIKE '%Ate%' OR adres LIKE '%Ate%')
AND
(naam LIKE '%bier%' OR omschrijving LIKE '%bier%' OR adres LIKE '%bier%')
OR
(naam LIKE '%union%' OR omschrijving LIKE '%union%' OR adres LIKE '%union%')

Ik hoef geen complete code's maar kan iemand mij een eindje op weg helpen?

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12-09 23:07
Wat is je probleem juist?
Wat wil je?
Wat lukt er niet?
Welk resultaat krijg je?

Waarom doe je
WHERE ( ...)
AND
(...)
OR
(....)

Dus, ik bedoel: waarom die ene keer AND, en de andere keer OR ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

Dus, ik bedoel: waarom die ene keer AND, en de andere keer OR ?
Waarschijnlijk omdat hij het volgende voor elkaar wil krijgen:
Ate AND bier OR union

The hardest thing in the world to understand is the income tax. - Albert Einstein


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 06-09 02:30

dusty

Celebrate Life!

Slagroom schreef op 12 March 2003 @ 11:45:
[..]
Ate AND bier OR union
[..]

Je hebt hier je zoek string, Nu weet je dus dat als er een spatie voor en na AND staat dat AND een combineer opdracht is. (netzoals OR)

Dus zal je deze string moeten opdelen in de verschillende delen ( ate, bier, union)

Probeer het eerst eens gewoon op te splitsen (dat moet lukken als je de search goed gebruikt!) en plaats dan jouw oplossing voor het opsplitsen hier.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

Maar je zou in ieder geval gebruik kunnen maken van de reguliere expressie-functies van PHP. Daarmee is het wel te doen denk ik.. Zie http://www.php.net/manual/en/ref.pcre.php

The hardest thing in the world to understand is the income tax. - Albert Einstein


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Dat opsplitsen is niet zo'n probleem:
<?
$keywords = preg_split ("/[\s]+/", $zoek_query);
?>

preg_split moet sneller zijn dan split, daarom gebruik ik deze. Maar dan moet je nog die AND's en die OR's op hun plekje krijgen.

[ Voor 24% gewijzigd door Slagroom op 12-03-2003 12:01 ]


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 06-09 02:30

dusty

Celebrate Life!

Nou heb je als het goed is een lijst van woorden in je keywords zitten, Kan je daar aan herkennen welke woorden zoek woorden zijn, en welke de koppelwoorden?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
dusty schreef op 12 maart 2003 @ 12:03:
Nou heb je als het goed is een lijst van woorden in je keywords zitten, Kan je daar aan herkennen welke woorden zoek woorden zijn, en welke de koppelwoorden?
Moet ik de koppelwoorden en de zoek woorden dan in een aparte array zetten?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$keywords = preg_split ("/[\s]+/", $zoek_query);

$koppelwoorden = array('AND', 'OR');

$zoek_koppelwoorden = array();
$zoek_woorden = array();

for($i = 0;$i < sizeof($keywords);$i++)
    if(in_array($kewords[$i], $koppelwoorden))
        $zoek_koppelwoorden[] = $kewords[$i];
    else
        $zoek_woorden = $kewords[$i];
?>

zo?

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 06-09 02:30

dusty

Celebrate Life!

Slagroom schreef op 12 March 2003 @ 12:07:
[...]


Moet ik de koppelwoorden en de zoek woorden dan in een aparte array zetten?
[..]

Nee je wilt nu je query dynamisch gaan opbouwen, dus maak je een string met alle keywords tot aan de eerstvolgende koppelwoord, dan zet je deze in een algemene "query" string.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
dusty schreef op 12 March 2003 @ 12:11:

[...]

Nee je wilt nu je query dynamisch gaan opbouwen, dus maak je een string met alle keywords tot aan de eerstvolgende koppelwoord, dan zet je deze in een algemene "query" string.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
$keywords = preg_split ("/[\s]+/", $zoek_query);

$koppelwoorden = array('AND', 'OR');

$zoek_koppelwoorden = array();
$zoek_woorden = array();

$j = 0;

for($i = 0;$i < sizeof($keywords);$i++) {
    if(in_array($kewords[$i], $koppelwoorden)) {
        $zoek_koppelwoorden[] = $kewords[$i];
        $j++;
    } else {
        $zoek_woorden[$j] .= $kewords[$i];
    }
}
?>


Bedoel je dit? Ik raakte de weg een beetje kwijt...

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Ik heb het!

http://www.monstar.nl/test/parse.php
http://www.monstar.nl/test/parse.phps

Maar wat als ik AND NOT wil gebruiken?

[ Voor 16% gewijzigd door Slagroom op 12-03-2003 12:50 ]


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 06-09 02:30

dusty

Celebrate Life!

Ik zoek op "hallo daar" :
SELECT * FROM leden WHERE (naam LIKE '%hallodaar%' OR omschrijving LIKE '%hallodaar%' OR adres LIKE '%hallodaar%')
dwz dat "hallo daar" hetzelfde is als "hallodaar" ? :P Lijkt mij niet de bedoeling.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
dusty schreef op 12 March 2003 @ 12:52:
Ik zoek op "hallo daar" :

[...]

dwz dat "hallo daar" hetzelfde is als "hallodaar" ? :P Lijkt mij niet de bedoeling.
Is nu opgelost alleen wil ik het laatste spatietje er af halen met een substr maar dat wertk niet...

ook opgelost :)

http://www.monstar.nl/test/parse.php
http://www.monstar.nl/test/parse.phps

Wat nou als ik een AND NOT of OR NOT wil gebruiken?

[ Voor 13% gewijzigd door Slagroom op 12-03-2003 13:06 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Als je MySQL 4 hebt of wilt installeren dan komt er een nieuwe mogelijkheid binnen bereik namelijk de boolean search:

MySQL Manual | 6.8 MySQL Full-text Search

Ik hoop dat je er wat aan hebt.

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Verwijderd schreef op 12 maart 2003 @ 13:12:
Als je MySQL 4 hebt of wilt installeren dan komt er een nieuwe mogelijkheid binnen bereik namelijk de boolean search:

MySQL Manual | 6.8 MySQL Full-text Search

Ik hoop dat je er wat aan hebt.
Had ik al gezien ja. Hele mooie functie tot ik er achter kwam dat ie alleen voor versie 4.01 was (de boolean search). En 4.X is nog niet stable dacht ik...

Acties:
  • 0 Henk 'm!

Verwijderd

Der is nog geen stable nee, maar je kunt hem wel als stable beschouwen volgens mij, aangezien ik er nog geen problemen mee gehad heb en verder er ook nooit iemand over gehoord heb.

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Hij komt op een productie server dus wacht ik liever tot hij stable is...

Maar even on-topic.

Hoe kan ik in het bovenstaande script het zo krijgen dat AND NOT ook werkt?

Acties:
  • 0 Henk 'm!

Verwijderd

De input exploden op spaties, checken met een loop of de waardes niet 'OR' of 'AND' en dan met een regexp er

code:
1
$waarde[$i] = "'%' . "$waarde[$i]" . '%'";


van.
Pagina: 1