login  Naam:   Wachtwoord: 
Registreer je!
 Forum

SQL in_array() ? (Opgelost)

Offline jc2 - 25/09/2009 16:09
Avatar van jc2PHP interesse Ik heb een kolom die vergeleken moet worden met een waarde.
Nu heb ik gevonden dat je via LIKE bijv. kunt vergelijken of een bepaalde waarde in een kolom voorkomt, maar ik zoek het omgekeerde.

Bijvoorbeeld:
kolomvariabele = koe
php-variabele = koek
Dit moet een match geven.

kolomvariabele = k
php-variabele = koek
Dit moet ook een match geven

kolomvariabele = koek
php-variabele = koek
Dit moet ook een match geven

kolomvariabele = ka
php-variabele = koek
Dit moet geen match geven.

Via php zou ik de functie in_array() gebruiken, maar hoe kan dit met SQL, aangezien dit eigenlijk de omgekeerde versie van LIKE is.
Er moet juist gekeken worden of de kolomvariabele in de waarde aanwezig is i.p.v. dat de waarde in de kolomvariabele zit.

8 antwoorden

Gesponsorde links
Offline marten - 25/09/2009 16:57
Avatar van marten Beheerder Uh?

als je appels met peren vergelijkt is toch hetzelfde als je peren met appels vergelijkt?
Offline jc2 - 25/09/2009 17:05 (laatste wijziging 25/09/2009 17:08)
Avatar van jc2 PHP interesse Nee, want als je hebt:
  1. // waarden variabelen zoals IN DATABASE/php
  2. $select['kolom']= "koe";
  3. $waarde = "koek";
  4.  
  5. // mysql_query
  6. SELECT * FROM tabelnaam WHERE `kolom` LIKE '%waarde%'

dan wordt niet de rij met kolom = koe weergeven.

Wel als dit zou kunnen:
  1. // waarden variabelen zoals IN DATABASE/php
  2. $select['kolom']= "koe";
  3. $waarde = "koek";
  4.  
  5. // mysql_query
  6. SELECT * FROM tabelnaam WHERE 'waarde' LIKE `%kolom%`
Offline Martijn - 25/09/2009 17:27
Avatar van Martijn Crew PHP wat een optie is, is je woord steeds subtr()-en:

  1. $woorden = array();
  2. for($i=1;$i<=strlen($woord);$i++){
  3. $woorden[] = substr($woord,0,$i);
  4. }


en dan kun je in je query doen WHERE IN( implode($woorden,",") )
Offline jc2 - 26/09/2009 14:20 (laatste wijziging 26/09/2009 14:29)
Avatar van jc2 PHP interesse Dit is de nieuwe code:
  1. <table border="0" width="100%" style="border-top:1px solid #C0C0C0;border-left:1px solid #C0C0C0;border-right:1px solid #C0C0C0;" cellpadding="5" cellspacing="0">
  2. <?
  3. $woorden = array();
  4. for($i=1;$i<=strlen($fInfo['woord']);$i++){
  5. $woorden[] = substr($fInfo['woord'],0,$i);
  6. }
  7.  
  8. $number=1;
  9. $selectWords=mysql_query("SELECT * FROM documenten WHERE `woord` IN ".(implode(",",$woorden))." ORDER BY `datumtijd`"); // gewijzigd: implode(",",$woorden) ipv implode($woorden,",")
  10. while($selectWords2=mysql_fetch_assoc($selectWords)){
  11. ?>
  12. <tr>
  13. <td width="5%" style="border-bottom:1px solid #C0C0C0;" align="center">
  14. <? echo $number ?>
  15. </td>
  16. <td width="80%" style="border-bottom:1px solid #C0C0C0;border-left:1px solid #C0C0C0;">
  17. <? echo $selectWords2['documentnaam'] ?>
  18. </td>
  19. <td width="15%" style="border-bottom:1px solid #C0C0C0;border-left:1px solid #C0C0C0;">
  20. <a href="<? echo $selectWords2['documentlink'].$fInfo['woord'] ?>/" target="_blank">klik hier</a>
  21. </td>
  22. </tr>
  23. <?
  24. $number++;
  25. }
  26. ?>
  27. </table>


Edit:
Nieuwe foutmelding:
Citaat:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''H,H2,H2B' ORDER BY `datumtijd`' at line 1
Offline Martijn - 26/09/2009 14:29 (laatste wijziging 26/09/2009 14:31)
Avatar van Martijn Crew PHP ja lieverd, je moet je implode wel even escapen ;)
Offline jc2 - 26/09/2009 14:47
Avatar van jc2 PHP interesse Hoe dan?
- mysql_escape_string werkt niet.
- voor en achter de aanhalingstekens een apostrof plaatsen werkt niet.
- mysql_escape_array bestaat niet.
- implode(\",\",$woorden) werkt niet.
Offline Martijn - 26/09/2009 18:03
Avatar van Martijn Crew PHP hetzelfde als je een $var escaped in een string
Offline Richard - 28/09/2009 12:39
Avatar van Richard Crew algemeen Ik denk dat je ongeveer de constructie zoekt:

  1. WHERE 'zoekwoord' LIKE CONCAT('%', kolom, '%') -- in normale SQL: '%' || kolom || '%'
  2. OR kolom LIKE '%zoekwoord%'
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.2s