login  Naam:   Wachtwoord: 
Registreer je!
 Forum

SQL Groeperen (Opgelost)

Offline Sar - 05/11/2008 16:24 (laatste wijziging 05/11/2008 16:26)
Avatar van SarPHP interesse Hallo,

Ik ben bezig met een klein link systeempje met categorieën.
Nu heb ik dit:

  1. <?php
  2.  
  3. $col_now = 0;
  4.  
  5. $_CATS['q'] = mysql_query("SELECT * FROM categorie ORDER BY position ASC");
  6. while($_CATS['r'] = mysql_fetch_assoc($_CATS['q']))
  7. {
  8. if($col_now == 0) {
  9. echo "<tr>\n";
  10. }
  11.  
  12. $_LINKS['q'] = mysql_query("SELECT * FROM links GROUP BY cat HAVING cat='".$_CATS['r']['id']."'");
  13.  
  14. echo "<td class='categorie'>".$_CATS['r']['cat']."<br />";
  15. while($_LINKS['r'] = mysql_fetch_assoc($_LINKS['q']))
  16. {
  17. echo "<a href='http://".$_LINKS['r']['link']."'>".$_LINKS['r']['name']."</a><br />";
  18. }
  19. echo "</td>\n";
  20.  
  21. $col_now++;
  22.  
  23. if($col_now == $_CONFIG['cols'])
  24. {
  25. echo "</tr>\n";
  26. $col_now = 0;
  27. }
  28. }
  29. ?>


Maar dit gaat natuurlijk niet werken, omdat er meestal minder categorieën dan links zijn.

Op dit moment heb ik 2 categorieën en in elke categorie 2 links.
Nu geeft hij dus wel de 2 categorieën aan, maar van elke categorie geeft hij maar 1 link weer.

Wie weet hoe ik dit verbeteren kan?

Alvast bedankt!

Greets.

2 antwoorden

Gesponsorde links
Offline Wim - 05/11/2008 16:41
Avatar van Wim Crew algemeen Paar tips:
- $col_now is overbodig. Je kan deze codes buiten de while lus zetten, zo moet je hier binnen je while lus geen rekening meer mee houden!
- Je GROUP BY is ook overbodig. Je selecteert namelijk op het criteria "cat=...", en nadien groepeer (neem je alles met dezelfde waard ebinnen dat veld appart) je op cat, wat dus uit komt op 1 groep...
- geen group by => where!

Probeer dit eens:
  1. <?php
  2. echo "<tr>\n";
  3.  
  4. $_CATS['q'] = mysql_query("SELECT * FROM categorie ORDER BY position ASC");
  5. while($_CATS['r'] = mysql_fetch_assoc($_CATS['q']))
  6. {
  7. $_LINKS['q'] = mysql_query("SELECT * FROM links WHERE cat='".$_CATS['r']['id']."'");
  8.  
  9. echo "<td class='categorie'>".$_CATS['r']['cat']."<br />";
  10. while($_LINKS['r'] = mysql_fetch_assoc($_LINKS['q']))
  11. {
  12. echo "<a href='http://".$_LINKS['r']['link']."'>".$_LINKS['r']['name']."</a><br />";
  13. }
  14. echo "</td>\n";
  15. }
  16. echo "</tr>\n";
  17. ?>
Offline Sar - 05/11/2008 18:57 (laatste wijziging 05/11/2008 19:01)
Avatar van Sar PHP interesse Alleen de $col_row wordt gebruikt om te kijken of er een </tr> moet komen of nog niet...

Dus die moet toch in de while blijven?

edit: Werkt idd zo wel, alleen heb de $col_row wel nodig.
Maar hoe kan het nou dat ie nu wel alle links pakt? Wat is er daarvoor nu precies veranderd?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.182s