login  Naam:   Wachtwoord: 
Registreer je!
 Forum
Zoeken  Regels  Help
Categorieën > PHP & SQL

Rijen uit meerdere tabellen tegelijk selecteren

Grayen – 27/08/2007 14:02
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
Daisycon - Verdien geld met uw website

Nanon – 27/08/2007 15:22
Joins?

Voldemort – 27/08/2007 15:27 (Laatst gewijzigd op 27/08/2007 15:28)
  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`

Ultimatum – 27/08/2007 15:28 (Laatst gewijzigd op 27/08/2007 15:29)
Het kan wel met joins, maar ik word geen wijs uit jouw array en zou zo ook niets kunnen proberen.

voldermort dus wel 

Voldemort – 27/08/2007 15:46
@Ultimatum: Hij bedoelt dit met z'n arrays:

  1. (
  2. [tabelnaam] => array
  3. (
  4. [veldnaam] => veldinhoud
  5. )
  6. )


Rik – 27/08/2007 16:43
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!  

Grayen – 27/08/2007 16:58
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.

Ibrahim – 27/08/2007 17:02
AS is niet verplicht in MySQL 

Rik – 27/08/2007 17:55 (Laatst gewijzigd op 27/08/2007 17:56)
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!  

Grayen – 27/08/2007 18:00
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-2012 Sitemasters.be - Regels - Gehost door: Vircon - Laadtijd: 0.157s