Meerdere resultaten van een join in een array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

G P

G P

21/02/2023 21:20:44
Quote Anchor link
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
 
PHP hulp

PHP hulp

18/12/2024 02:44:37
 
Jan R

Jan R

21/02/2023 22:35:04
Quote Anchor link
Je moet alle data ophalen zoals al deed en dan via een lus omzetten naar het formaat dat jij wilt
 

25/02/2023 09:51:06
Quote Anchor link
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() .
 
Ivo P

Ivo P

25/02/2023 15:31:59
Quote Anchor link
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.
 

26/02/2023 10:06:52
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');
 
Jan R

Jan R

27/02/2023 07:07:11
Quote Anchor link
ts is na een week nog niet teruggekeerd om een update te plaatsen. Zouden we ons dan moe maken?
 
G P

G P

24/03/2023 21:53:15
Quote Anchor link
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.