Join Statement Verbessen

justintime

Benutzer
Beiträge
6
Nabend,

ich habe da mal eine Frage zu meinen SQL Query.

Ich habe zwei Tabellen welche wie folgt aufgebaut sind

Tabelle user:
CREATE TABLE `user` (
`user_id` int(5) NOT NULL AUTO_INCREMENT,
`user_name` varchar(100) NOT NULL DEFAULT '',
`user_description` text,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

Tabelle picture:
CREATE TABLE `picture` (
`picture_id` int(5) NOT NULL AUTO_INCREMENT,
`u_id` int(5) DEFAULT NULL,
`file_name` varchar(255) NOT NULL DEFAULT '',
`file_size` int(10) NOT NULL,
`file_type` varchar(10) NOT NULL DEFAULT '',
PRIMARY KEY (`picture_id`),
KEY `u_id` (`u_id`),
CONSTRAINT `upload_data_ibfk_1` FOREIGN KEY (`u_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8;

In der ersten Tabelle (user) stehen jegliche Benutzer und in der zweiten Tabelle jegliche Bilder die ein User hochgeladen hat.

Nun habe ich vor das ich eine Ausgabe zu bekommen welche folgenden Aufbau besitzt:
user_id | user_name | user_description | file_name | file_size | file_type ......... | file_nameN | file_sizeN | file_typeN

Also ein Tupelo wo der User mit alle seinen Fotos aufgelistet wird.

Mein jetziger Query gibt mir jedoch nur alle User untereinander auf

SELECT u.user_id, u.user_name, u.user_description, p.file_name, p.file_size, p.file_type
FROM user u
LEFT JOIN picture p ON p.u_id = u.user_id
ORDER by u.user_id DESC;

Wäre cool wenn mir evtl. jemand helfen könnte.
 
Werbung:
Das wird so nix. Das Resultat ist ja wieder eine Tabelle, eine Tabelle hat aber über alle Zeilen einen festen Aufbau. Von exotischen Lösungen mittels komplizierter stored procs oder so sehe ich jetzt mal ab.
 
Das wäre okay. Ich probiere gerade damit rum.
Bekomme aber mit dem Query nur ein Tupelo wo alle Bilder drin sind. Sollten aber 2 Tupel dann sein. Der erste mit 2 Bildern und das zweite Tupel mit 4 Bildern

Hier mein Query
SELECT u.user_id, u.user_name, u.user_description, GROUP_CONCAT(p.file_name ORDER BY p.file_name SEPARATOR ', ') AS file_name
FROM user u
LEFT JOIN picture p ON p.u_id = u.user_id
ORDER BY n.newsNumber DESC;
 
Um es mal zu zeigen:

Code:
test=*# select nummer, array_agg(name) from foo;
ERROR:  column "foo.nummer" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select nummer, array_agg(name) from foo;
  ^
test=*#

Wie gesagt, MySQL ist (nicht nur hier) blind und behindert.
 
Werbung:
Zurück
Oben