MySQL abfrage für bilder
robzn
- datenbank
hallo ich würde gerne bilder aus einer datenbank filtern! das war bis jetz nie ein problem, doch irgenwie schein ich jetzt auf der leitung zu stehen! ich habe mehrere projekte und mehrere bilder:
jedes projekt hat so ungefähr 3-4 bilder, doch jetz will ich nur 1 einziges bild aus der datenbank haben und nicht 3 oder 4.
wenn ich aber jetzt mit der abfrage unten den projektnamen zb ausgebe kommt er 3 mal (weil zb 1 projekt 3 bilder hat, also für jedes bild 1 mal)
wie mache ich es der datenbank klar ,dass ich nur 1 Bild benötige???
danke robzn
mein code bis jetzt:
SELECT bilder.link, projekte.pID, projekte.sID, projekte.name
FROM projekte, bilder, phat
WHERE sID = colname AND projekte.pID = phat.pID AND phat.bID = bilder.bID
hi, füge einfach "LIMIT 1" an deine Abfrage.
Wenn du nicht immer dasselbe bild sehen willst, dann füge "ORDER BY RAND() LIMIT 1" an, dann wird in zufälliger Reihenfolge gesucht, und ebenfalls nach dem ersten Bild gestoppt.
Wenn du in deiner PHP Variablen dennoch alle Bilder gespeichert haben willst, machst du das so.
$result=MYSQL_QUERY("DEIN MYSQL[evtl. mit RAND(), aber ohne LIMIT]")
statt $result jetzt aber mit "while($row=mysql_fetch_assoc)" abzurufen,
lässt du das "while" jetzt einfach weg!
lg yens
hallo!
hi, füge einfach "LIMIT 1" an deine Abfrage.
das habe ich schon versucht! aber dann gibt er mir nur noch 1 projekt aus! es sind aber deutlich mehr in jeder der sparten
...
trotzdem danke
hallo!
Hi,
das habe ich schon versucht! aber dann gibt er mir nur noch 1 projekt aus! es sind aber deutlich mehr in jeder der sparten
Hört sich nach einem Problem an, dass ich auch vor wenigen Wochen hatte.
Hilft dir das dort erwähnte DISTINCT?
Gruß, Volker
Hilft dir das dort erwähnte DISTINCT?
Gruß, Volker
ich habe grade danach gegoogelt! und nichts nützliches gefunden!
könntest du mir vielleicht noch einen denkanstoß geben??
danke
robzn
ich habe grade danach gegoogelt! und nichts nützliches gefunden!
könntest du mir vielleicht noch einen denkanstoß geben??
In dem verlinkten Beitrag befindet sich doch ein Link auf die MySQL-Dokumentation.
Gruß, Volker
Achso, du willst praktisch alle Projekte und jeweils ein einziges Bild pro Projekt in einer Abfrage zusammenfassen und diese in einer einzigen Web-Kolumne anzeigen?
Wahrscheinlich kannst du das mit Group by etc. lösen, aber da kenn ich mich auch nicht aus. Poste trotzdem mal den ganzen diesbezüglichen Code (auch den zur HTML-Generierung etc.)
Wahrscheinlich kannst du das mit Group by etc. lösen, aber da kenn ich mich auch nicht aus. Poste trotzdem mal den ganzen diesbezüglichen Code (auch den zur HTML-Generierung etc.)
wenn ich jetzt den code poste würde hier das forum unter gehen ... :D
ich stell mal einen link rein damit ihr einen überblick hab was ich machen willl
http://www.lengger-gruppe.at/lengger/htdocs/index/projekte/sparten.php?sID=8&lang=de
thumbnail funktioniert schon aber wie gesagt es soll nur einmal das jeweilige projekt angezeigt werden und nicht so oft wie es bilder gibt....
ich wäre für jede antwort dankbar
robzn
hi,
Im Moment gibt deine Abfrage eine temporäre Tabelle zurück, die soviele Spalten hat wie Bilder existieren, und dementsprechend die Projekte mehrmals vorkommen. Da du ja für die Großansicht alle Bilder benötigst, würde ich die Abfrage so lassen und eine zweite schreiben.
Mache doch einfach eine separate Abfrage, in der du nur die Projekte in der Tabelle Projekte abfragst!
Mache doch einfach eine separate Abfrage, in der du nur die Projekte in der Tabelle Projekte abfragst!
hier ist nun wieder das problem das die datensätze mit Wh-bereich ausgelesen werden und ich dann nicht an die id eine projektes rankomme um ein bild zu filtern
und ein SELECT in den WH-bereich zu schreiben ist, finde ich, eine sehr unvorteilhafte lösung!
es ist nicht möglich bilder so in einen seperaten datensatz auszulesen!
yo,
SELECT bilder.link, projekte.pID, projekte.sID, projekte.name
FROM projekte, bilder, phat
WHERE sID = colname AND projekte.pID = phat.pID AND phat.bID = bilder.bID
die schreibeweise der joins ist nicht sehr leserlich, deswegen würde ich grundsätzlich die joins auch explizit hinschreiben, zum beispiel in der folgenden form :
SELECT bilder.link, pr.pID, pr.sID, pr.name
FROM projekte pr
INNER JOIN phat ph ON pr.pID = ph.pID
INNER JOIN bilder b ON ph.bID = b.bID
WHERE sID = colname
das liesst sich schon mal viel angenehmer. nun aber zu deinem eigentlichen problem, was du brauchst sind korrelierte unterabfragen, so dass du zu einem projekt immer nur ein bild erhälst.
SELECT bilder.link, pr.pID, pr.sID, pr.name
FROM projekte pr
INNER JOIN phat ph ON pr.pID = ph.pID
INNER JOIN bilder b ON ph.bID = b.bID
WHERE sID = colname
AND b.bID =
(SELECT MAX(b2.bID)
FROM phat ph2
INNER JOIN bilder b2 ON ph2.bID = b2.bID
WHERE pr.pID = ph2.pID
)
;
Ilja
Super! danke bussi :D