|
Categorieën >
PHP & SQL
Rijen uit meerdere tabellen tegelijk selecteren
|
|
|
offline
|
PHP ver gevorderde
|
Beste leden,
Weet iemand of het mogelijk is met MySQL om met een query de volgende output te krijgen.
Array
(
[mayor] => Array
(
[0] => Array
(
[id] => 1
[age] => 48
[name] => Anjo
)
)
[minor] => Array
(
[0] => Array
(
[id] => 1
[age] => 19
[name] => Sybren
[mayor_id] => 1
)
[1] => Array
(
[id] => 2
[age] => 16
[name] => Wiegert
[mayor_id] => 1
)
[2] => Array
(
[id] => 3
[age] => 16
[name] => Matthijs
[mayor_id] => 1
)
)
)
( ( ( [id] => 1 [age] => 48 [name] => Anjo ) ) ( ( [id] => 1 [age] => 19 [name] => Sybren [mayor_id] => 1 ) ( [id] => 2 [age] => 16 [name] => Wiegert [mayor_id] => 1 ) ( [id] => 3 [age] => 16 [name] => Matthijs [mayor_id] => 1 ) ) )
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
|
|
|
offline
|
PHP interesse
|
Joins?
|
Voldemort – 27/08/2007 15:27 (Laatst gewijzigd op 27/08/2007 15:28)
|
|
offline
|
PHP ver gevorderde
|
SELECT a.*, i.*
FROM `mayor` a INNER JOIN `minor` i
ON(a.`id`=i.`mayor_id`)
SELECT a.*, i.* FROM `mayor` a INNER JOIN `minor` i 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)
|
|
offline
|
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
|
PHP ver gevorderde
|
@Ultimatum: Hij bedoelt dit met z'n arrays:
array
(
[tabelnaam] => array
(
[veldnaam] => veldinhoud
)
)
( ( [veldnaam] => veldinhoud ) )
|
|
|
|
offline
|
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
|
Crew Javascript
|
AS is niet verplicht in MySQL
|
Rik – 27/08/2007 17:55 (Laatst gewijzigd op 27/08/2007 17:56)
|
|
offline
|
 
Crew algemeen
|
Ik heb geprobeerd jouw situatie na te maken:
CREATE TABLE `people` (
`id` tinyint(4) NOT NULL auto_increment,
`age` tinyint(4) default NULL,
`name` varchar(255) default NULL,
`mayor_id` tinyint(4) default NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `people` ( `id` tinyint(4) NOT NULL AUTO_INCREMENT, `age` tinyint(4) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `mayor_id` tinyint(4) DEFAULT NULL, PRIMARY KEY (`id`) );
En ik heb er een paar mensen in gezet. Met dit scriptje: $result = mysql_query('SELECT * FROM people');
$people = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
if ($row['mayor_id'] == 0) {
unset($row['mayor_id']);
$people['mayor'][] = $row;
} else {
$people['minor'][] = $row;
}
}
print_r($people);
if ($row['mayor_id'] == 0) { $people['mayor'][] = $row; } else { $people['minor'][] = $row; } }
Krijg je dan volgens mij het gewenste resultaat: Array
(
[mayor] => Array
(
[0] => Array
(
[id] => 1
[age] => 54
[name] => Baas
)
)
[minor] => Array
(
[0] => Array
(
[id] => 2
[age] => 26
[name] => Hulpje
[mayor_id] => 1
)
[1] => Array
(
[id] => 3
[age] => 34
[name] => Werknemer
[mayor_id] => 1
)
[2] => Array
(
[id] => 4
[age] =>
[name] => Secretaresse
[mayor_id] => 3
)
)
)
( ( ( [id] => 1 [age] => 54 [name] => Baas ) ) ( ( [id] => 2 [age] => 26 [name] => Hulpje [mayor_id] => 1 ) ( [id] => 3 [age] => 34 [name] => Werknemer [mayor_id] => 1 ) ( [id] => 4 [age] => [name] => Secretaresse [mayor_id] => 3 ) ) )
Edit:
Hehe, de secretaresse heeft geen leeftijd!
|
|
|
|
offline
|
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.
|
Dit onderwerp is gesloten.
|
|
|