Viele MySQL-Datenbankabfragen

mkoeni1

Erfahrenes Mitglied
Hallo SQL-Gemeinde,

wie kann ich zu jedem Bild (all_pictures) auf einer Übersichts-Seite den ersten Kommentar anzeigen ?:

ich habe die Tabelle: all_comment
Code:
id
pic_id_fk
text
email



und die Tabelle: all_pictures
Code:
id
pic_name
pic_pfad
pic_width
pic_height

in der Datenbank. Und dazu folgende Beziehung:

Beziehung:
pic_id_fk -> id



jeweils einen ersten Kommentar darunter anzeigen ?
Ich habe diese SQL-Abfrage versucht:
PHP:
$comment = "SELECT `all_comment`. *
FROM `all_comment` , `all_pictures`
WHERE `all_comment`.`pic_id_fk` = `all_pictures`.`id`  ORDER BY id ASC LIMIT 1"

Aber da erscheint zu jedem Bild nur der Kommentar der zu Bild 1 gehört !

Wer hat einen Tip ?

Viele herzliche Grüße
Matze
 
Zuletzt bearbeitet:
Hi,

leider nich. Auch mit der Angabe von :
Code:
SELECT DISTINCT `all_comment`. *
FROM `all_comment`, `all_pictures`
WHERE  `all_comment`.`pic_id_fk` = ".$row->id."
ORDER BY id ASC


es noch nicht !

Gruß Matze
 
Hallo,

Ich hätte es so gemacht (Man kann in SQL sog. Unterabfragen machen, das ist toll):

PHP:
$sqlStrText = "SELECT text FROM all_comment ORDER BY id LIMIT 1";
$sqlStrMail = "SELECT email FROM all_comment ORDER BY id LIMIT 1";

//eigentlicher SQLString
$sqlStr = "SELECT *, ($sqlStrText) AS CommentText, ($sqlStrMail) AS CommentMail
                FROM all_pictures";

//zugriff, wie gewohnt
$data = mysql_fetch_assoc( /* [..] */ );
echo $data['id'];              //aus all_pictures
echo $data['pic_name'];  //aus all_pictures
echo $data['CommentText']; //erster Text aus all_comment

Gruß Andrej
 
Hallo,

colle Abfrage, die aber leider immer noch zu jedem Bild, (Man kann sich das so vorstellen:
56 Bilder in Zeilen zu je 3 Spalten aufgeteilt), den Kommentar mit der nidriegsten id, in dem Fall 3 anzeigt !!
Ziel sollte es aber sein, zu jedem Bild den ersten gefundenen Kommentar anzuzeigen.

http://www.skv2.de/test/test.JPG


Viele herzliche Grüße
Matze
 
Zuletzt bearbeitet:
ups. was vergessen.
in der Abfrage dann "WHERE id = all_pictures.pic_id_fk" hinzufügen:

PHP:
$sqlStrText = "SELECT text FROM all_comment WHERE id = all_pictures.pic_id_fk ORDER BY id LIMIT 1";
$sqlStrMail = "SELECT email FROM all_comment WHERE id = all_pictures.pic_id_fk ORDER BY id LIMIT 1";

Gruß Andrej
 
das frißt er nicht:
$sqlStrText = "SELECT text FROM all_comment WHERE id = all_pictures.pic_id_fk ORDER BY id LIMIT 1";


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ..

ich denke mir fehlt ein JOIN. So in etwa müsste die Abfrage aussehen:
SELECT `all_comment`.*
FROM `all_comment`
LEFT JOIN `all_pictures` ON `all_comment`.`pic_id_fk` = `all_pictures`.`id` WHERE all_pictures.id = 1 LIMIT 1
und dabei sollte die Zahl 1 von 1 bis zum letzten Bild x laufen.

-> ... WHERE all_pictures.id = 1 (bis) x


Viele herzliche Grüße
Matze
 
JOIN gibt es nicht bei MySQL, da MySQL keine Referenzen unterstützt.

Hast du auch die beiden Strings in die Abfrage eingefügt, also
PHP:
$sqlStr = "SELECT *, ($sqlStrText) AS CommentText, ($sqlStrMail) AS CommentMail FROM all_pictures";
?

Das ist natürlich wichtig.

Gruß Andrej
 
Hallo,

Andrej Dyck hat gesagt.:
JOIN gibt es nicht bei MySQL, da MySQL keine Referenzen unterstützt.
Wie meinst du das jetzt? MySQL unterstützt selbstverständlich auch JOIN-Anweisungen.

Für die Abfrage der beiden Felder reicht übrigens auch ein einziger Subselect:
Code:
SELECT
  `p`.*,
  (SELECT
     `text` AS `CommentText`,
     `email` AS `CommentMail`
   FROM `all_comment`
   WHERE `pic_id_fk` = `p`.`id`
   ORDER BY `id`
   LIMIT 1)
FROM `all_pictures` `p`

Grüße,
Matthias
 
Hallo Matthias,

klar ok gut, die Anweisung in einer zusammengefasst, bringt mich aber auch noch nicht ans Ziel.
Ich möchte einfach für jedes bild (id) den ersten Kommentar aus der Datenbank ziehen !

Ich werde das ganze mal anders formulieren.
Es sieht im Moment so aus, dass unter jedem Bild der gleiche Kommentar steht. Das ist im Moment die id 1.
Code:
SELECT text FROM all_comment WHERE all_comment.pic_id_fk = 1 ORDER BY id LIMIT 1
Ich frage mich, und das ist das Problem:
Wie kann ich alle id's mit in die Abfrage aufnehmen. Vielleicht habe ich auch den falschen Denkansatz.
Weiter unten gebe ich zu jedem Bild die id aus:
Code:
SELECT text FROM all_comment WHERE all_comment.pic_id_fk = ".$row->id." ORDER BY id LIMIT 1

Das frißt er aber nicht. Da gibt er dann den Fehler zurück:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...

Wahrscheinlich macht er bei jedem laden der Seite nur eine SELECT Abfrage.
Wie kann ich jetzt aber für jedes Bild eine machen ?
Mit einer while-Schleife ?

Wer kann mir helfen


Viele herzliche Grüße
Matze
 

Neue Beiträge

Zurück