login  Naam:   Wachtwoord: 
Registreer je!
 Forum

dubbele resultaten??

Offline Giant - 17/11/2007 09:10 (laatste wijziging 17/11/2007 17:19)
Avatar van GiantPHP beginner hallo,

ik ben bezig met een zoekfunctie te maken,
maar nu krijg ik alle resultaten een x aantal keer dubbel...
mijn query is als volgt:
  1. $query = "SELECT * FROM `topics`, `categorien`, `leden`";
  2. $query .= "WHERE `titel` LIKE '%".$zoek."%'";
  3. $query .= "OR `categorie_naam` LIKE '%".$zoek."%'";
  4. $query .= "OR `naam` LIKE '%".$zoek."%'";

en ik haal de resultaten daaruit op de volgende manier:
  1. $uitvoer = mysql_query($query) or die (mysql_error());
  2. while($lijst = mysql_fetch_object($uitvoer)) {
  3. echo "<a href='?url=forum&page=profile&naam=".$lijst->naam."' target='_blank'>".$lijst->naam."</a><br />";
  4. echo "<a href='?url=forum&categorie_id=".$lijst->categorie_id."' target='_blank'>".$lijst->categorie_naam."</a><br />";
  5. echo "<a href='?url=forum&topic_id=".$lijst->topic_id."' target='_blank'>".$lijst->titel."</a><br />";
  6. }


heeft iemand enig idee wat ik fout doe?

edit: waar zijn de php/mysql experts wanneer je ze nodig hebt?xD

18 antwoorden

Gesponsorde links
Offline Stijn - 17/11/2007 10:44
Avatar van Stijn PHP expert
  1. $query .= " GROUP BY id";

Voeg dit achteraan je query toe.

Je kan ipv die OR's in je query ook AND's van maken 
Offline Giant - 17/11/2007 11:25 (laatste wijziging 17/11/2007 12:53)
Avatar van Giant PHP beginner ik heb nu als query:
  1. $query = "SELECT * FROM `topics`, `categorien`, `leden`";
  2. $query .= "WHERE `titel` LIKE '%".$zoek."%'";
  3. $query .= "AND `categorie_naam` LIKE '%".$zoek."%'";
  4. $query .= "AND `naam` LIKE '%".$zoek."%'";
  5. $query .= " GROUP BY id";


edit: nu krijg ik nog steeds hetzelfde...
oftewel alle leden 1keer maar alle topics en categorien bij ieder lid opnieuw...
Offline ranco - 17/11/2007 13:46 (laatste wijziging 17/11/2007 13:46)
Avatar van ranco PHP gevorderde Dit kun je bereiken door DISTINCT in je query toe te voegen.

Zie deze link: http://dev.mysq...ation.html

Dus iets in de zin van : SELECT DISTINT Topics.... enz

Succes!
Offline Giant - 17/11/2007 15:48
Avatar van Giant PHP beginner ik heb niet het gevoel dat het in mijn query zit...
ik denk dat het hierin zit:
  1. $uitvoer = mysql_query($query) or die (mysql_error());
  2. while($lijst = mysql_fetch_object($uitvoer)) {
  3. echo "<a href='?url=forum&page=profile&naam=".$lijst->naam."' target='_blank'>".$lijst->naam."</a><br />";
  4. echo "<a href='?url=forum&categorie_id=".$lijst->categorie_id."' target='_blank'>".$lijst->categorie_naam."</a><br />";
  5. echo "<a href='?url=forum&topic_id=".$lijst->topic_id."' target='_blank'>".$lijst->titel."</a><br />";
  6. }
Offline thomasje - 17/11/2007 17:25
Avatar van thomasje MySQL beginner Zou je eens heel de code op internet kunnen zetten?
Offline Giant - 17/11/2007 17:30
Avatar van Giant PHP beginner tuurlijk:)
plaatscode: 4040
daar staat hij:)
Offline Stijn - 17/11/2007 18:28
Avatar van Stijn PHP expert Je probleem zit duidelijk in je SQL 

Je selecteert van 3 tabellen. In de WHERE zeg je de kolommen wel maar je moet wel nog zeggen in welke tabellen die kolommen staan.

  1. WHERE forum.topics LIKE ....
Offline Giant - 17/11/2007 18:40 (laatste wijziging 17/11/2007 22:01)
Avatar van Giant PHP beginner ik heb het nu zo:
Plaatscode: 4041
edit: werkt nu weer maar ik krijg nog steeds de usernames 1 keer per username(zoals het hoort) en de topics/categorieën bij iedere username op nieuw...

ik denk toch dat het hem in de volgende code zit:
  1. while($lijst = mysql_fetch_object($uitvoer)) {
  2. if($_POST['zoek_in'] == "alles"){
  3. ?>
  4. <table width="100%" border="1px">
  5. <tr><td width="33%">
  6. <a href='?url=forum&page=profile&naam=<?=$check['naam'] ?>' target='_blank'><?=$check['naam'] ?></a>
  7. </td><td width="33%">
  8. <a href='?url=forum&categorie_id=<?=$check['categorie_id'] ?>' target='_blank'><?=$check['categorie_naam'] ?></a>
  9. </td><td width="33%">
  10. <a href='?url=forum&topic_id=<?=$check['topic_id'] ?>' target='_blank'><?=$check['titel'] ?></a>
  11. </td></tr>
  12. </table>
  13. <?php
  14. }
  15. }

omdat dit voor iedere gebruiker weer opnieuw langs categorien, en topics gaat toch?
als dit zo is,
weet iemand dan hoe ik dit moet oplossen?
want ik heb zelf echt geen flauw idee:'( (ben nog niet zo lang met php bezig...)

edit: het zit hem inderdaad in die code, hier staat hij online klik maar op de search button(en kijk daarna eens border)
Offline mitshell - 17/11/2007 23:48
Avatar van mitshell Nieuw lid
  1. $query .= "GROUP BY topic_id, categorie_id, lid_id";

moet zijn
  1. $query .= "GROUP BY topics.topic_id, categorien.categorie_id, leden.lid_id";

Zoals stijn al zij
Offline Giant - 18/11/2007 08:48
Avatar van Giant PHP beginner ook dat heeft geen effect...
het zit hem volgens mijn echt niet in de query...
en ik ben er bijna zeker van dat het wel hierin zit:
  1. while($lijst = mysql_fetch_object($uitvoer)) {
  2. if($_POST['zoek_in'] == "alles"){
  3. ?>
  4. <table width="100%" border="1px">
  5. <tr><td width="33%">
  6. <a href='?url=forum&page=profile&naam=<?=$check['naam'] ?>' target='_blank'><?=$check['naam'] ?></a>
  7. </td><td width="33%">
  8. <a href='?url=forum&categorie_id=<?=$check['categorie_id'] ?>' target='_blank'><?=$check['categorie_naam'] ?></a>
  9. </td><td width="33%">
  10. <a href='?url=forum&topic_id=<?=$check['topic_id'] ?>' target='_blank'><?=$check['titel'] ?></a>
  11. </td></tr>
  12. </table>
  13. <?php
  14. }
  15. }
Offline rroobb - 18/11/2007 15:39
Avatar van rroobb PHP interesse Probeer eens SELECT DISTINCT
Offline mitshell - 18/11/2007 16:45
Avatar van mitshell Nieuw lid
Giant schreef:
ook dat heeft geen effect...
het zit hem volgens mijn echt niet in de query...
en ik ben er bijna zeker van dat het wel hierin zit:
[..code..]


Je While is prima Als jij blijft geloven dat het daaraan ligt gaat je script nooit werken
je while laad niet dubbel ofzo je query pakt alles gewoon dubbel
Offline Giant - 18/11/2007 18:12 (laatste wijziging 18/11/2007 18:13)
Avatar van Giant PHP beginner hoe kan ik dit oplossen dan?
kan iemand mischien mijn query aanpassen zodat hij het wel goed doet?
want van dat distinct snap ik geen zak...
ben ook pas een beginner met (my)sql en php...
en ben nog niet eens een jaar met web design bezig xD
Offline Flex1986 - 18/11/2007 18:26 (laatste wijziging 18/11/2007 18:26)
Avatar van Flex1986 Gouden medaille

Senior Member
Ga weer even verder met je eerste plaatscode en voer dan deze reactie van stijn uit. http://www.sitemasters.be/forum/2/25565/1#id173040

Daar zit namelijk de oplossing denk ik!
Offline Giant - 18/11/2007 18:32
Avatar van Giant PHP beginner @flex,
dit had ik een al een tijdje gedaan op de volgende manier:
  1. $query = "SELECT * FROM `topics`, `categorien`, `leden`";
  2. $query .= "WHERE topics.titel LIKE '%".$zoek."%'";
  3. $query .= "OR categorien.categorie_naam LIKE '%".$zoek."%'";
  4. $query .= "OR leden.naam LIKE '%".$zoek."%'";
  5. $query .= "GROUP BY topics.topic_id, categorien.categorie_id, leden.lid_id";

(dit helpt nog steeds niet)
en ik snap niet hoe ik DISTINCT erin moet bouwen:'(
Offline rroobb - 20/11/2007 14:29 (laatste wijziging 20/11/2007 14:43)
Avatar van rroobb PHP interesse
  1. $query = "SELECT DISTINCT titel,* FROM `topics`, `categorien`, `leden`";
  2. $query .= "WHERE topics.titel LIKE '%".$zoek."%'";
  3. $query .= "OR categorien.categorie_naam LIKE '%".$zoek."%'";
  4. $query .= "OR leden.naam LIKE '%".$zoek."%'";
  5. $query .= "GROUP BY topics.topic_id, categorien.categorie_id, leden.lid_id";
Offline Giant - 20/11/2007 15:52 (laatste wijziging 20/11/2007 15:56)
Avatar van Giant PHP beginner
rroobb schreef:
[..code..]


dan krijg ik de volgende error:
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 '* FROM `topics`, `categorien`, `leden`WHERE topics.titel LIKE '%test%'OR categor' at line 1
Offline spaceflippie - 11/07/2008 21:16 (laatste wijziging 11/07/2008 21:17)
Avatar van spaceflippie Nieuw lid Moet het dit niet zijn?

  1. $query = "SELECT DISTINCT * FROM `topics`, `categorien`, `leden`";$query .= "WHERE topics.titel LIKE '%".$zoek."%'";
  2. $query .= "OR categorien.categorie_naam LIKE '%".$zoek."%'";
  3. $query .= "OR leden.naam LIKE '%".$zoek."%'";
  4. $query .= "GROUP BY topics.topic_id, categorien.categorie_id, leden.lid_id";
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.51s