Meerdere resultaten van een join in een array
Ik heb 2 tabellen in mijn database
Tabel 1 (t1)
+----+------+------+
| ID | name | info |
+------------------+
| 01 | KidA | bla1 |
+------------------+
| 02 | KidB | bla2 |
+------------------+
| 03 | KidC | bla3 |
+------------------+
Tabel 2 (t2) (KD = Kid ID)
+----+----+--------+
| ID | KD | nummer |
+------------------+
| 01 | 01 | 123456 |
+------------------+
| 02 | 02 | 234567 |
+------------------+
| 03 | 02 | 345678 |
+------------------+
Mijn query:
SELECT
t1.name AS naam,
t1.info AS info,
t2.ID AS ID,
t2.nummer AS nummer
LEFT JOIN
t2
ON
t1.ID = t2.KD;
Resultaat:
KidA - bla1 - 01 - 123456
KidB - bla2 - 02 - 234567
KidB - bla2 - 03 - 345678
KidC - bla3 - NULL - NULL
Zoals je ziet krijg ik 2 x het resultaat KidB
Ik zou graag hebben dat dit 1 resultaat word zoals in een array (Resultaten worden trouwens al in een array gegeven)
Meer zoals dit:
$result[0] =
* KidA
* bla1
[0]** 01
[0]** 123456
$result[1] =
* KidB
* bla2
[0]** 02
[0]** 234567
[1]** 03
[1]** 345678
Ik hoop dat mijn vraag een beetje duidelijk is
Je moet alle data ophalen zoals al deed en dan via een lus omzetten naar het formaat dat jij wilt
MySQL en MariaDB en PostgreSQL). Vervolgens haal je die als string binnen in PHP en zet je het om naar een associatieve array met json_decode() .
Je kunt in SQL de data van elke rij omzetten naar een JSON array (met Ik denk dat daar meer het probleem zit, dan in hoe draag ik dat dan over naar PHP.
Nu heb ik helaas niet genoeg tijd om het helemaal uit te spellen, dan moet ik eerst weer een nieuwe MySQL installeren en dat gaat me te ver voor de zondagochtend. Maar misschien heeft iemand wel een recente versie en dan kan je JSON_ARRAYAGG() en JSON_OBJECTAGG() gebruiken om rijen te maken in een JSON-resultaat (in SQL).
Dit had ik al wel uitgetikt, voor wie een werkend voorbeeld wil uittypen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE `test`.`t1` (
`ID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` TEXT NOT NULL,
`info` TEXT NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;
INSERT INTO `t1` (`name`, `info`) VALUES ('KidA', 'bla1');
INSERT INTO `t1` (`name`, `info`) VALUES ('KidB', 'bla2');
INSERT INTO `t1` (`name`, `info`) VALUES ('KidC', 'bla3');
CREATE TABLE `test`.`t2` (
`ID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`KD` INT UNSIGNED NOT NULL,
`nummer` TEXT NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;
ALTER TABLE `t2` ADD FOREIGN KEY (`KD`) REFERENCES `t1`(`ID`) ON DELETE CASCADE ON UPDATE CASCADE;
INSERT INTO `t2` (`KD`, `nummer`) VALUES (1, '123456');
INSERT INTO `t2` (`KD`, `nummer`) VALUES (2, '234567');
INSERT INTO `t2` (`KD`, `nummer`) VALUES (2, '345678');
`ID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` TEXT NOT NULL,
`info` TEXT NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;
INSERT INTO `t1` (`name`, `info`) VALUES ('KidA', 'bla1');
INSERT INTO `t1` (`name`, `info`) VALUES ('KidB', 'bla2');
INSERT INTO `t1` (`name`, `info`) VALUES ('KidC', 'bla3');
CREATE TABLE `test`.`t2` (
`ID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`KD` INT UNSIGNED NOT NULL,
`nummer` TEXT NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;
ALTER TABLE `t2` ADD FOREIGN KEY (`KD`) REFERENCES `t1`(`ID`) ON DELETE CASCADE ON UPDATE CASCADE;
INSERT INTO `t2` (`KD`, `nummer`) VALUES (1, '123456');
INSERT INTO `t2` (`KD`, `nummer`) VALUES (2, '234567');
INSERT INTO `t2` (`KD`, `nummer`) VALUES (2, '345678');
ts is na een week nog niet teruggekeerd om een update te plaatsen. Zouden we ons dan moe maken?
Hierdoor krijg ik wel 1 resultaat met alle nodige gegevens.
@Ad Fundum: In mijn voorbeeld ben inderdaad de FROM vergeten, mijn excuses
@Jan R: Ik ben ziek geweest, mijn hoofd stond echt niet naar programmeren, ook mijn excuses hiervoor