login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Zoeken met mysql..

Offline Frederic - 15/08/2005 23:00 (laatste wijziging 15/08/2005 23:08)
Avatar van FredericPHP ver gevorderde Ik zit met een lastig probleem: ik wil zoeken in mijn mysql tabellen, maar ergens gaat het ineens mis (opmerkingen: zie script):

  1. <?php
  2. //HIERBOVEN LAAT IK EEN FORMULIER INGEVEN, EN BEPAAL IK IN WELKE TABEL HET MOET GEBEUREN
  3. $sqlA = mysql_query("SELECT id, onderwerp, bericht FROM ".$tabel." WHERE onderwerp LIKE '%".$trefwoord."%' OR bericht LIKE '%".$trefwoord."%'") or die(mysql_error());
  4. echo mysql_num_rows($sqlA)."<br /><br />"; //ECHO't BVB 11
  5. while($rijA = mysql_fetch_assoc($sqlA)){ //ALLE 11 de gegevens laten aflopen
  6. $topicid = $rijA['id'];
  7. echo $topicid."-"; //NORMAAL MOET IK NU 11 getallen krijgen gescheiden door een -, maar dat komt niet, er komt maar 1 getal
  8. $sqlB = mysql_query("SELECT leden.gebruikersnaam, leden.id AS ledenid, forum_topic.*, forum_topic.id AS topicid, forum_categorie.id AS categorieid, forum_categorie.naam AS categorienaam FROM leden, forum_topic, forum_categorie WHERE forum_topic.id = '".$topicid."' AND forum_topic.lid = leden.id AND forum_topic.categorie = forum_categorie.id ORDER BY laatste_bericht DESC"); //SQL QUERY OM TITEL EN GEBRUIKERSNAAM OP TE HALEN
  9. while($rijB = mysql_fetch_assoc($sqlB)){
  10. echo $rijB['onderwerp'];
  11. echo "<br />".$rijB['bericht'];//DIT GAAT WEER GOED, MAAR ENKEL VOOR 1 TOPIC, TERWIJL IE ER 11 ZOU MOETEN AFLOPEN
  12. }
  13. }
  14. ?>
  15. <?php
  16. }
  17. ?>

3 antwoorden

Gesponsorde links
Offline Joel - 15/08/2005 23:06 (laatste wijziging 15/08/2005 23:07)
Avatar van Joel Eigenaar Je kunt best de tweede variabele (die nu $sql heet) $sql2 noemen, zodat die niet worden verwisseld met elkaar.
Offline Frederic - 15/08/2005 23:10 (laatste wijziging 15/08/2005 23:10)
Avatar van Frederic PHP ver gevorderde Jah inderdaad, de 2 liepen gewoon in mekaar over 
Thanks!
-lockje-?
Offline Piro - 15/08/2005 23:12
Avatar van Piro Nieuw lid Je verandert $sql tijdens de whileloop, daar loopt het waarschijnlijk mis...

  1. <?php
  2. //HIERBOVEN ZOEK IK ALLES, EN VIA MYSQL_QUERY STEEK IK ALLES IN DE VAR 'SQL' GENAAMD
  3. echo mysql_num_rows($sql)."<br /><br />"; //ECHO't BVB 11
  4. while($rij = mysql_fetch_assoc($sql)){ //ALLE 11 de gegevens laten aflopen
  5. $topicid = $rij['id'];
  6. echo $topicid."-"; //NORMAAL MOET IK NU 11 getallen krijgen gescheiden door een -, maar dat komt niet, er komt maar 1 getal
  7. $sql2 = mysql_query("SELECT leden.gebruikersnaam, leden.id AS ledenid, forum_topic.*, forum_topic.id AS topicid, forum_categorie.id AS categorieid, forum_categorie.naam AS categorienaam FROM leden, forum_topic, forum_categorie WHERE forum_topic.id = '".$topicid."' AND forum_topic.lid = leden.id AND forum_topic.categorie = forum_categorie.id ORDER BY laatste_bericht DESC"); //SQL QUERY OM TITEL EN GEBRUIKERSNAAM OP TE HALEN
  8. while($rij2 = mysql_fetch_assoc($sql2)){
  9. echo $ri2j['onderwerp'];
  10. echo "<br />".$rij2['bericht'];//DIT GAAT WEER GOED, MAAR ENKEL VOOR 1 TOPIC, TERWIJL IE ER 11 ZOU MOETEN AFLOPEN
  11. }
  12. }
  13. ?>
  14. <?php
  15. }
  16. ?>



Om te zoeken in meerdere velden heb ik deze functie gemaakt:
  1. function getWhereString($keywords, $andor, $fields){
  2. $keywordsA = split('[ +]', $keywords);
  3. $where = '';
  4. for($i=0;$i<count($keywordsA);$i++){
  5. $where .= (($i==0)?' ':' '.$andor.' ').(($andor=='AND')?'( ':'');
  6. for ($p = 0; $p<count($fields); $p++){
  7. $where .= (($p==0)?' ':' OR ').$fields[$p]." LIKE '%".$keywordsA[$i]."%' ";
  8. }
  9. $where .= (($andor == 'AND')?' ) ':' ');
  10. }
  11. return $where;
  12. }


Dit gebruik je dan bv zo:
  1. $sSql = "SELECT * FROM tabel WHERE ".getWhereString('keyword1 keyword2', 'OR', array('kolom1', 'kolom2', 'kolom3'));


Misschien ben je er wat mee ;)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.197s