login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Ingewikkelde Query (Opgelost)

Offline Mmore - 02/06/2007 14:55 (laatste wijziging 02/06/2007 17:10)
Avatar van MmoreMySQL interesse Ik heb voor een forum nu links de topis en rechts de reacties. Als je dan op een topic links klikt verschijnen de reacties daarvan rechts.

Nu wil ik de topics sorteren op laatste reacties.. ik heb echter geen idee hoe dit moet, of wat ik hiervoor moet gebruiken.

De reacties staan in: forum_reactiesgame, deze tabel heeft een id, lid_ID, reactie, reactie_op en reactie_naam..
De topics staan in: forum_onderwerpengame, deze wil ik dus selecteren en sorteren op de laatste posts....

Wilt iemand mij hiermee helpen 

19 antwoorden

Gesponsorde links
Offline citroen - 02/06/2007 14:57
Avatar van citroen Onbekend t' zou een idee zijn om de datums van de reacties in uw databases te steken zodat je daarop kan sorteren...
Offline Mmore - 02/06/2007 15:00
Avatar van Mmore MySQL interesse Die staan er ook bij.. Mijn fout De reacties staan in de rij: om
Offline Scythen - 02/06/2007 15:02
Avatar van Scythen PHP gevorderde $sql = mysql_query("SELECT * FROM table ORDER BY om DESC LIMIT 10");
Offline Mmore - 02/06/2007 15:04
Avatar van Mmore MySQL interesse Nee want de reacties en de topics staan in verschillende tabelen..
Ik wil dus dat de topic met de laatste post bovenaan staat, misschien begrijpen jullie het verkeerd / leg ik het verkeerd uit 
Offline Scythen - 02/06/2007 15:05 (laatste wijziging 02/06/2007 15:06)
Avatar van Scythen PHP gevorderde Met de laatste reply? Zoiets heet een reply

Topic is een nieuw onderwerp, reply is een nieuw bericht IN de topic.

Maak je een nieuwe table aan met forum_replies, link je die met de table forum, en kijk je dan naar OM van forum_replies.

gewoon in je reacties table een row van OM, en klaar is kees.
Offline Mmore - 02/06/2007 15:09
Avatar van Mmore MySQL interesse replay of reactie maakt niet uit.. Kan je me uitleggen hoe ik deze 2 tabellen met elkaar kan linken?
Offline Scythen - 02/06/2007 15:10
Avatar van Scythen PHP gevorderde of in je topic table eentje van : laatst_reply
Offline Mmore - 02/06/2007 15:12 (laatste wijziging 02/06/2007 15:46)
Avatar van Mmore MySQL interesse Ja maar dat is toch helemaal niet handig?
Ik weet dat het mogelijk is gewoon

  1. SELECT * FROM forum_onderwerpengame,forum_reactiesgame ORDER BY forum_reactiesgame.reactie_datum

Naar zoiets ben ik opzoek Iemand? 
Offline marten - 02/06/2007 15:55
Avatar van marten Beheerder Je kan je tabellen met elkaar linken via JOINS.
Voor een join heb je een waarde nodig die in beide tabellen gelijk zijn. Dit is meestal in de ene tabel een primary key en in de andere tabel een foreign key. Deze kan je dan op de volgende manier koppelen.

  1. <?php
  2. $sQuery = "SELECT
  3. tabelnaam1.veldnaam1,
  4. tabelnaam1.veldnaam2,
  5. tabelnaam2.veldnaam1
  6. FROM
  7. tabelnaam AS tabelnaam1
  8. LEFT | RIGHT | INNER JOIN
  9. tabelnaam2 AS tabelnaam2
  10. ON
  11. tabelnaam1.veldnaam1 = tabelnaam2.veldnaam1";
  12. ?>


Je kan kiezen tussen LEFT RIGHT en INNER JOIN. Dit verschil wordt in een tutorial hier verder uitgelegd. Verder dien je er rekening mee te houden dat je de tabelnaam voor het veld zet en dat in de ON clausule de beide velden staan die gelijk zijn.
Offline Mmore - 02/06/2007 16:14 (laatste wijziging 02/06/2007 16:18)
Avatar van Mmore MySQL interesse
  1. $query = "SELECT
  2. forum_onderwerpengame.*,
  3. forum_reactiesgame.*
  4. FROM
  5. forum_onderwerpengame AS forum_onderwerpengame
  6. INNER JOIN
  7. forum_reactiesgame AS forum_reactiesgame
  8. ON
  9. forum_onderwerpengame.id = forum_reactiesgame.op ORDER BY 'forum_reactiesgame.om' DESC";
  10.  
  11. while ($data = mysql_fetch_object($query) or die(mysql_error())) {
  12.  
  13. <!-- Output topics -->
  14. <tr><td class="<?= $achtergrond ?>"><a class="topic" href="javascript:void(parent.left.location.href='left.php?topic=<?= $data->forum_onderwerpengame.id ?>');
  15. javascript:void(parent.TopLeftFrame.location.href='main.php?topic=<?= $data->forum_onderwerpengame.id ?>');
  16. void(parent.right.location.href='right.php?topic=<?= $data->forum_onderwerpengame.id ?>');"><?= $data->forum_onderwerpengame.titel ?></a></td>
  17. <!-- Einde output topics -->
  18.  
  19. <? //Weergeef ook het aantal post per topic
  20. $cQuery = mysql_query("SELECT COUNT(`id`) FROM `forum_reactiesgame` WHERE `op` = '$data->id'");
  21. $cCount = mysql_result($cQuery,0);
  22. echo "<td class=\"".$achtergrond."\">$cCount</td></tr>";
  23. }
  24. } ?>


Geeft helemaal niets als uitput.. 
Offline marten - 02/06/2007 16:18
Avatar van marten Beheerder Kijk eerst zelf eens wat je hier allemaal fout doet.

Stel voor elke fout die ik eruit haal krijg ik 1000 euro van je. Zou je dan wel willen zoeken?
Offline Mmore - 02/06/2007 16:21
Avatar van Mmore MySQL interesse Als ik hem had kunnen vinden had ik het niet hier geplaats 

Deze query
  1. $query = mysql_query("SELECT * FROM `forum_onderwerpengame` ORDER BY 'id' DESC");


Met deze output
  1. <!-- Output topics -->
  2. <tr><td class="<?= $achtergrond ?>"><a class="topic" href="javascript:void(parent.left.location.href='left.php?topic=<?= $data->id ?>');
  3. javascript:void(parent.TopLeftFrame.location.href='main.php?topic=<?= $data->id ?>');
  4. void(parent.right.location.href='right.php?topic=<?= $data->id ?>');"><?= $data->titel ?></a></td>
  5. <!-- Einde output topics -->

werkt wel prima, behalve dat 'ie dan sorteert op de ouderdom van de topic 
Offline marten - 02/06/2007 16:24
Avatar van marten Beheerder Nou de query ga je nu aanpassen naar die join.

Vervolgens ga je die query uitvoeren. Geen resultaat? or die(mysql_error()) achter je query zetten. Nog geen resultaat? Query uitvoeren in phpmyadmin. En wat doen die akelige * achter je tabelnamen?
Offline Mmore - 02/06/2007 16:32 (laatste wijziging 02/06/2007 16:32)
Avatar van Mmore MySQL interesse Ik heb ervan gemaakt
  1. SELECT
  2. forum_onderwerpengame.id,
  3. forum_onderwerpengame.titel,
  4. forum_reactiesgame.om

dit geeft nog steeds geen output. Als ik de code uitvoer in PhpMyAdmin krijg ik terug:
  1. id titel om
  2. NULL NULL 2007-05-17 14:01:02
  3. NULL NULL 2007-06-01 23:45:14
  4. NULL NULL 2007-05-17 14:44:44
  5. NULL NULL 2007-05-17 15:48:06
  6. NULL NULL 2007-05-17 15:50:28
  7. NULL NULL 2007-05-17 15:50:50
  8. NULL NULL 2007-05-17 16:22:20
  9. NULL NULL 2007-05-17 18:02:30
  10. NULL NULL 2007-05-17 18:47:07
  11. NULL NULL 2007-05-23 16:50:39
  12. NULL NULL 2007-05-24 09:42:30
  13. NULL NULL 2007-06-01 23:45:18
  14. NULL NULL 2007-05-24 13:31:21
  15. NULL NULL 2007-05-24 17:30:01
  16. NULL NULL 2007-05-24 20:37:54
  17. NULL NULL 2007-05-25 04:35:18
  18. NULL NULL 2007-05-25 17:05:36
  19. NULL NULL 2007-05-25 19:07:00
  20. NULL NULL 2007-06-01 02:13:10
  21. NULL NULL 2007-05-26 20:22:25
  22. NULL NULL 2007-05-28 09:52:08
  23. NULL NULL 2007-05-28 13:09:11
  24. NULL NULL 2007-05-28 14:16:07
  25. NULL NULL 2007-05-31 21:32:04
  26. NULL NULL 2007-05-31 23:26:34
  27. NULL NULL 2007-05-29 14:46:27
  28. NULL NULL 2007-05-29 14:49:05
  29. NULL NULL 2007-05-31 21:42:08
  30. NULL NULL 2007-05-31 21:27:32
  31. NULL NULL 2007-06-01 23:49:54
  32. NULL NULL 2007-06-01 23:47:18
  33. 100 Test TOPIC 2007-06-02 00:25:32
  34. NULL NULL 2007-06-02 00:19:42
  35. 97 Daily Chat 2007-06-02 00:20:34
  36. 97 Daily Chat 2007-06-02 01:25:23
  37. 97 Daily Chat 2007-06-02 01:31:20
  38. 97 Daily Chat 2007-06-02 01:34:50
  39. 97 Daily Chat 2007-06-02 12:53:54
  40. 97 Daily Chat 2007-06-02 14:14:54


(En dan gebruik ik RIGHT join.. die moet ik toch hebben?)
Offline marten - 02/06/2007 16:34
Avatar van marten Beheerder Dan heb je je database niet goed opgebouwd. Het mag namelijk niet voorkomen dat een ID een NULL waarde bevat.

Verder als de query het wel in phpMyAdmin doet dan is je query goed en is de stap daarna waarschijnlijk een foute. Wat doe je daarna? Post je code eens. (groter dan 70 regels op plaatscode.be)
Offline Mmore - 02/06/2007 16:39
Avatar van Mmore MySQL interesse De NULL waardes komen nog van het oude systeem, waarin er geen spraken was van de forum_reactiesgame.op...

Dit is de code:
http://plaatscode.be/5505/
Offline marten - 02/06/2007 16:45
Avatar van marten Beheerder #
while ($data = mysql_fetch_object($query) or die(mysql_error())) {

hier ga je de fout al in.

Je vergeet de query uit te voeren! dus voor deze while loop moet nog:

  1. <?php $query = mysql_query($query); ?>
Offline Mmore - 02/06/2007 17:01 (laatste wijziging 02/06/2007 17:12)
Avatar van Mmore MySQL interesse Ik heb de code een beetje aangepast aan de hand van de tutorials over JOINs hier en het is gelukt! Harstikke bedankt voor je hulp marten 

Edit: Hij doet het prima zolang er geen of maar 1 reactie is maar zodra ik 2 reacties heeft geeft hij de topic 2x weer, 3 reacties 3x and so on.. Bijvoorbeeld
Citaat:
Daily Chat
test 2
test 2
Vragen? 0
test343? 0
wewae 0
zoals je ziet komt test 2x terug.. Wat ik probeerde is
  1. SELECT DISTINCT
  2. forum_onderwerpengame.titel,
maar dit werkt niet binnen inner joins?

Nog een keer de hele query:
  1. $query = "SELECT DISTINCT
  2. forum_onderwerpengame.titel,
  3. forum_onderwerpengame.id,
  4. forum_reactiesgame.om
  5.  
  6. FROM
  7. forum_onderwerpengame AS forum_onderwerpengame
  8.  
  9. LEFT JOIN
  10.  
  11. forum_reactiesgame AS forum_reactiesgame
  12. ON
  13.  
  14. forum_onderwerpengame.id = forum_reactiesgame.op ORDER BY 'om' DESC";
Offline marten - 02/06/2007 17:16
Avatar van marten Beheerder Je moet zorgen dat je in je query nog een where clausule zet. Dus wanneer je op topic 1 klikt dat je dan in de url een get value meestuurd waar 1 in staat en deze zet je dan in je where clausule.

En aub geen priveberichten sturen of ik aub in je topic wil kijken.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.318s