Hallo,

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
Je kunt in SQL de data van elke rij omzetten naar een JSON array (met 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() .
Maar ook dan zul je de data op de een of andere manier moeten query-en.

Ik denk dat daar meer het probleem zit, dan in hoe draag ik dat dan over naar PHP.
Het probleem is dat denk ik niet, de vragensteller krijgt immers resultaten uit MySQL (afgezien van dat het FROM-statement mist in zijn geposte query).

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:

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');
ts is na een week nog niet teruggekeerd om een update te plaatsen. Zouden we ons dan moe maken?
Ik heb het probleem opgelost door een GROUP_CONCAT te gebruiken met SEPARATOR en nadien een explode gebruikt.
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

Reageren