login  Naam:   Wachtwoord: 
Registreer je!
 Forum

SQL vraagje

Offline Zain - 21/02/2007 00:30
Avatar van ZainNieuw lid aye

ik ben nu een uurtje bezig geweest met het volgende:

ik heb categorieen, en ik heb subcategorieen. beide tabellen hebben een veld wat dezelfde waarde heeft ( koppelveld dus )

maar, dit is een 1 op veel relatie.. ( wat eng is ) dus wat krijg ik na alle joins die ik ken uitgeprobeerd te hebben? ( ik neem even script talen om het wat duidelijker te krijgen )

Scripten
PHP
Scripten
ASP

wat dit zou moeten worden:

Scripten
PHP, ASP

maar dat lukt me dus totaal niet... heeft iemand een ideetje hoe ik dit kan oplossen?

alvast bedankt! ( ondertussen kloot ik ook verder.. )

6 antwoorden

Gesponsorde links
Offline raza - 21/02/2007 00:38
Avatar van raza HTML beginner dan zal je niet goed genormaliseerd hebben.
Offline Martijn1989 - 21/02/2007 00:40 (laatste wijziging 21/02/2007 00:43)
Avatar van Martijn1989 PHP ver gevorderde Geen join wel anders :

  1. <?php
  2. $select_categorie = mysql_query("SELECT * FROM `categorie`") or die (Mysql_Error());
  3.  
  4. while($object_categorie = mysql_fetch_assoc($select_categorie)) {
  5.  
  6. echo $object_categorie ."<br>";
  7.  
  8. $select_sub = mysql_query("SELECT * FROM `subcategorie` WHERE `categorie` = '". $object_categorie['id'] ."'") or die (Mysql_Error());
  9.  
  10. while($object_sub = mysql_fetch_assoc($select_sub)) {
  11.  
  12. echo $object_sub['naam'] .", ";
  13.  
  14. }
  15.  
  16. echo "<br>";
  17.  
  18. }
  19. ?>


Alleen kunnen het wel veel querys worden op een gegeven moment .
Offline Zain - 21/02/2007 00:40 (laatste wijziging 21/02/2007 00:41)
Avatar van Zain Nieuw lid cat_id-------|
cat_name |
|
subcat_id |
subcat_name |
cat_id---------

zo heb ik het genormaliseerd- dit leek mij goed- hoe zou jij het doen dan?

EDIT: Martijn ( yo! ) dat kan, en daar heb ik ook aan gedacht. leek me op zich wel een goede oplossing- maar ik ben niet zo een voorstander van queries in loopjes
Offline Rens - 21/02/2007 01:42
Avatar van Rens Gouden medaille

Crew algemeen
http://www.site...L/GROUP_BY
Offline dotPixel - 21/02/2007 03:33 (laatste wijziging 21/02/2007 03:33)
Avatar van dotPixel PHP interesse Je gebruikt een RIGHT JOIN (Of LEFT JOIN, ligt aan je query opbouw), hieronder zie je een voorbeeld.

  1. SELECT subcat.naam as sub_naam, categorie.naam as cat_naam FROM subcat RIGHT JOIN categorie ON(subcat.catID = categorie.id)


sub_naam | cat_naam
PHP | Scripten
ASP | Scripten
NULL | Designen

Zoiets krijg je er bijvoorbeeld uit. Om te zorgen dat je PHP en ASP alleen bij 'scripten' krijgt, ga je gebruik maken van arrays bij het ophalen.

  1. $cats = array();
  2. while ($data = mysql_fetch_assoc($result)) {
  3. if (!isset($cats[$data['cat_naam'])) {
  4. $cats[$data['cat_naam']] = array();
  5. }
  6.  
  7. $cats[$data['cat_naam']][] = $data['sub_naam'];
  8. }


Als het goed is heb je nu dit.
  1. Array($cats)
  2. |» Array(Scripten)
  3. |» PHP
  4. |» ASP
  5. |» Array(Designen)
  6. |» '' (empty)


Dan kun je met behulp van foreaches het weergeven. 
Fouten voorbehouden, niet getest.
Offline Zain - 21/02/2007 14:22
Avatar van Zain Nieuw lid dotPixel: ik heb je manier geprobeerd, en dat lijkt me idd de beste/handigste van allemaal. alleen begrijp ik niets van een foreach(), en vind ik de uitleg op php.net nogal.. onhandig. maar; als ik er een print_r() overheen gooi krijg ik dit:

  1. Array ( [Scripten] => Array ( ) [PHP] => Array ( [0] => PHP ) [JSP] => Array ( [0] => JSP ) [HTML] => Array ( [0] => HTML ) [Designen] => Array ( ) [Photoshop] => Array ( [0] => Photoshop ) )


hij haalt hem er dus wel uit- of dat dubbele hoort weet ik alleen niet 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.208s