login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Rijen uit meerdere tabellen tegelijk selecteren

Offline Grayen - 27/08/2007 14:02
Avatar van GrayenPHP ver gevorderde Beste leden,

Weet iemand of het mogelijk is met MySQL om met een query de volgende output te krijgen.

  1. (
  2. [mayor] => Array
  3. (
  4. [0] => Array
  5. (
  6. [id] => 1
  7. [age] => 48
  8. [name] => Anjo
  9. )
  10.  
  11. )
  12.  
  13. [minor] => Array
  14. (
  15. [0] => Array
  16. (
  17. [id] => 1
  18. [age] => 19
  19. [name] => Sybren
  20. [mayor_id] => 1
  21. )
  22.  
  23. [1] => Array
  24. (
  25. [id] => 2
  26. [age] => 16
  27. [name] => Wiegert
  28. [mayor_id] => 1
  29. )
  30.  
  31. [2] => Array
  32. (
  33. [id] => 3
  34. [age] => 16
  35. [name] => Matthijs
  36. [mayor_id] => 1
  37. )
  38.  
  39. )
  40.  
  41. )


Het lijkt met niet nodig om de MySQL tabellen ook te plaatsen, deze kun je immers uit de array opmaken die ik hierboven heb gegeven.

Eerst dacht ik dat ik moest werken met joins, maar ik zat fout, althans mijn lukte het niet.

Weet iemand hoe ik met een query de gegevens zoals hierboven weergegeven zou kunnen selecteren uit mijn database? Ik ben zeer slecht in SQL. Ik ken alleen de basis, namelijk de standaard SELECT, UPDATE, INSERT en DELETE commando's daarmee heb ik het altijd gered, maar nu is er noodzaak voor moeilijkere queries. Is het uberhaupt wel mogelijk doormiddel van een query? Ik weet wel hoe ik zou kunnen doen met meerdere queries, maar dat is mijn vraag niet, ik zou graag willen weten of het mogelijk is met één enkele query.

Bij voorbaat dank,

Grayen

9 antwoorden

Gesponsorde links
Offline Nanon - 27/08/2007 15:22
Avatar van Nanon PHP interesse Joins?
Offline Voldemort - 27/08/2007 15:27 (laatste wijziging 27/08/2007 15:28)
Avatar van Voldemort PHP ver gevorderde
  1. SELECT a.*, i.*
  2. FROM `mayor` a INNER JOIN `minor` i
  3. ON(a.`id`=i.`mayor_id`)


Zoiets? De WHERE en de velden die je er specifiek wil uithalen kun je toevoegen door:

a.`veldnaam_uit_tabel_mayor`
i.`veldnaam_uit_tabel_minor`
Offline Ultimatum - 27/08/2007 15:28 (laatste wijziging 27/08/2007 15:29)
Avatar van Ultimatum PHP expert Het kan wel met joins, maar ik word geen wijs uit jouw array en zou zo ook niets kunnen proberen.

voldermort dus wel 
Offline Voldemort - 27/08/2007 15:46
Avatar van Voldemort PHP ver gevorderde @Ultimatum: Hij bedoelt dit met z'n arrays:

  1. (
  2. [tabelnaam] => array
  3. (
  4. [veldnaam] => veldinhoud
  5. )
  6. )
Offline Rik - 27/08/2007 16:43
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Precies zo'n resultaat als die array kan je niet krijgen zonder php omdat sql geen arrays als record terug kan geven.

Ik zou de code van Voldemort eens proberen. Als dat niet werkt kan je denk ik het beste je tabelstructuur even posten zodat we zelf wat kunnen klooien!  
Offline Grayen - 27/08/2007 16:58
Avatar van Grayen PHP ver gevorderde Werkt niet, het woord AS moet nog tussen mayor en a (althans ik dacht dat verplicht was). Maar ik heb diezelfde soort query al uitgevoert, en krijg dan alleen alle rijen uit de tabel minor. Wat een logisch gevolg is want alle veldnamen uit mayor zitten ook in minor en worden dus overschreven, toen ik alleen enkele velden selecteerde, kreeg ik ook niet hetgewenste effect, want bij een join zorg je ervoor dat velden uit een andere rij gekoppeld wordt aan de rij waaruit je aan het selecteren bent, dus zou je in alledrie de rijen van de minor tabel dezelfde gegevens uit mayor krijgen.

Dus bij joins ligt niet de oplossing, ik ben bang dat ik meerdere queries moet gaan toepassen.
Offline Ibrahim - 27/08/2007 17:02
Avatar van Ibrahim PHP expert AS is niet verplicht in MySQL 
Offline Rik - 27/08/2007 17:55 (laatste wijziging 27/08/2007 17:56)
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Ik heb geprobeerd jouw situatie na te maken:
  1. CREATE TABLE `people` (
  2. `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  3. `age` tinyint(4) DEFAULT NULL,
  4. `name` varchar(255) DEFAULT NULL,
  5. `mayor_id` tinyint(4) DEFAULT NULL,
  6. PRIMARY KEY (`id`)
  7. );
En ik heb er een paar mensen in gezet. Met dit scriptje:
  1. $result = mysql_query('SELECT * FROM people');
  2. $people = array();
  3. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  4. if ($row['mayor_id'] == 0) {
  5. unset($row['mayor_id']);
  6. $people['mayor'][] = $row;
  7. } else {
  8. $people['minor'][] = $row;
  9. }
  10. }
  11. print_r($people);
Krijg je dan volgens mij het gewenste resultaat:
  1. (
  2. [mayor] => Array
  3. (
  4. [0] => Array
  5. (
  6. [id] => 1
  7. [age] => 54
  8. [name] => Baas
  9. )
  10.  
  11. )
  12.  
  13. [minor] => Array
  14. (
  15. [0] => Array
  16. (
  17. [id] => 2
  18. [age] => 26
  19. [name] => Hulpje
  20. [mayor_id] => 1
  21. )
  22.  
  23. [1] => Array
  24. (
  25. [id] => 3
  26. [age] => 34
  27. [name] => Werknemer
  28. [mayor_id] => 1
  29. )
  30.  
  31. [2] => Array
  32. (
  33. [id] => 4
  34. [age] =>
  35. [name] => Secretaresse
  36. [mayor_id] => 3
  37. )
  38.  
  39. )
  40.  
  41. )


Edit:
Hehe, de secretaresse heeft geen leeftijd!  
Offline Grayen - 27/08/2007 18:00
Avatar van Grayen PHP ver gevorderde Bedankt, maar helaas ziet mijn tabel structuur er niet zo uit. De structuur ziet er namelijk uit zoals Voldemort uit legde. Het kan nu toevallig zo dat ze gecombineert in een tabel kunnen, maar het zijn maar voorbeeld tabellen, dus als je totaal verschillende velden zou hebben, zou jouw plan niet werken.

Ik geef het op om het te combineren tot een query en ga gebruik maken van een combinatie van meerdere queries.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.226s