PHP [SQL] Abfrage, bitte um Unterstützung bez. Query

L

lyzerak

Gast
Hy Leute

Ich bin ein wenig PHP mit MySql am lernen. Habe zwei Datenbanken und möchte nun auf der Homepage gewisse Daten in einer gewöhnlichen Tabelle ausgeben. Nun stosse ich mit dem Query ein wenig an.

Das möchte ich machen:

BILD

Kann mir jemand einen Tipp geben bez. der Query?

Danke
 
Zuletzt bearbeitet:
Was du brauchst ist bedingtes Zählen. Das lässt sich mittels SUM und CASE umsetzen. Hier gibts ein schönes Beispiel: http://timmurphy.org/2010/10/10/conditional-count-in-sql/ (Die CASE Syntax ist in MySQL ein bisschen anders)
Außerdem wäre möglicherweise ein LEFT OUTER JOIN besser geeignet. Ich versteh auch nicht ganz, warum du nach ismiddleman und istrustedtrader gruppierst. Denn beide Attribute sind doch für jeden Benutzer eindeutig?
 
Hi Leute

Habs so gelöst:

Code:
SELECT username AS Username
      ,(SELECT COUNT(*) FROM tradeDB
        WHERE tradeDB.rating_for = userDB.username
          AND tradeDB.Rating = 5) AS Positive
      ,(SELECT COUNT(*) FROM tradeDB
         WHERE tradeDB.rating_for = userDB.username
           AND tradeDB.Rating = 3) AS Neutral
      ,(SELECT COUNT(*) FROM tradeDB
         WHERE tradeDB.rating_for = userDB.username
           AND tradeDB.Rating = 1) AS Negative
      ,(SELECT COUNT(*) FROM tradeDB
         WHERE tradeDB.rating_for = userDB.username) AS TotalTrades	  
      ,CASE WHEN is_middleman=1 THEN "YES" ELSE "NO" END AS IsMiddleman
      ,CASE WHEN is_trusted_trader=1 THEN "YES" ELSE "NO" END AS IsTrustedTrader 
FROM userDB
 
Das sieht extrem umständlich aus. So viele Subselects...
Du Joinst immer tradeDB.rating_for = userDB.username. Also kannst du auch einmal außen Joinen.
Zählen kannst du über count wenn du nach dem username Gruppierst.
Dann kannst du in einer einzigen Spalte den Status Positiv, Neutral oder Negativ ausgeben. Ist i.d.R. für die weitere Bearbeitung einfacher.
Willst du nicht gematchte User mit ausgeben machst du einfach einen left Join.

Müsste eigentlich gehen. Aber ohne DB zu testen isses doof.

PS: Du schreibst oben von zwei Datenbanken (geht nicht in einem Select), joinst aber nur zwei simple Tabellen an die jemand warum auch immer DB drann gehängt hat.
 
Zurück
Oben