robzn: MySQL abfrage für bilder

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

  1. 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

    1. 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

      1. 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

        1. 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

          1. 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

  2. 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.)

    1. 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

      1. 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!

        1. 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!

  3. 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

    1. Super! danke bussi :D