COUNT über 2 Tabellen - wie geht das?!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • COUNT über 2 Tabellen - wie geht das?!

    Hi zusammen,

    ich komme einfach nicht weiter ...

    Ich habe 2 Mysql Tabellen:

    1. Tabelle: cs_shops (besteht aus den Feldern: id, shopTyp)
    2. Tabelle: cs_transactions (besteht aus den Feldern: id, shopID, itemName)

    shopTyp ist "sale" oder "aquisition"

    Ich möchte nun herausfinden welche Items am meisten ver- bzw. angekauft wurden.

    Funktioniert:
    $result = mysql_query("SELECT itemName,COUNT(*) FROM cs_transactions GROUP BY itemName ORDER BY COUNT(*) DESC;");
    while($row=mysql_fetch_array($result)) {
    echo '{"item": "'.$row['itemName'].'","menge": '.$row['COUNT(*)'].'}';

    Ich habe nur keine Ahnung wie ich es anstelle, dass ich nun noch die Verknüpfung zur cs_shops Tabelle hinbekomme, um eben nur die meisten Transaktionen von sale-Shops sowie von aquisition-Shops herauszufinden.

    Kann mir jemand weiterhelfen??

    Vielen Dank!

  • #2
    Kennst du dich mit JOINS aus?

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Ein wenig, aber ich bekomme die Abfrage nicht hin.
      Kann mir jemand weiterhelfen?

      Kommentar


      • #4
        Zeig mal deine bisherigen Versuche.

        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Das hier ist ein Versuch gewesen:

          $result = mysql_query("SELECT cs_transactions.itemName,(SELECT COUNT(*) FROM cs_transactions) FROM cs_transactions, cs_shops WHERE cs_shops.shopKind = 'sale' GROUP BY cs_transactions.itemName ORDER BY (SELECT COUNT(*) FROM cs_transactions) DESC;");

          Klappt aber nicht, da kommt ein seltsames Ergebnis raus.

          Kommentar


          • #6
            Zitat von screamfine Beitrag anzeigen
            Ich möchte nun herausfinden welche Items am meisten ver- bzw. angekauft wurden.
            ...
            Ich habe nur keine Ahnung wie ich es anstelle, dass ich nun noch die Verknüpfung zur cs_shops Tabelle hinbekomme, um eben nur die meisten Transaktionen von sale-Shops sowie von aquisition-Shops herauszufinden.
            Sag halt der Datenbank, wie sie die Tabellen miteinander zu verknüpfen hat: Den Fremdschlüssel ".shopID" in "transactions" mit dem Primärschlüssel von "shops".

            PHP-Code:
            $sql 'select 
                count(*), transactions.itemName
                from 
                    shops, transactions
                where
                    transactions.shopID = shops.ID
                    and shops.shopType = "acquisition"
                group by
                    transactions.itemName
                order by
                    count(*) desc
            '

            Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

            Kommentar


            • #7
              Vielen lieben Dank - das funktioniert!!!!

              Kommentar


              • #8
                Bitte keine grauenhaft unlesbaren Theta-Style Joins verwenden, sondern Joins nach dem modernen ANSI-Standard:

                Code:
                SELECT 
                    t.itemName, COUNT(*)
                FROM 
                    shops s
                INNER JOIN
                    transactions t ON ( t.shopID = s.ID )
                WHERE
                    s.shopType = "acquisition"
                GROUP BY
                    t.itemName
                ORDER BY
                    COUNT(*) DESC

                Kommentar


                • #9
                  Zitat von h3ll Beitrag anzeigen
                  Bitte keine grauenhaft unlesbaren Theta-Style Joins verwenden, sondern ...
                  Hmmm, aber der Typ des Joins ändert sich doch nicht durch eine andere Schreibweise. Er bleibt derselbe gewöhnliche Equi-Join, egal wie ich ihn notiere ...

                  ... Joins nach dem modernen ANSI-Standard:
                  (...)
                  Modern wäre jetzt nicht die erste Eigenschaft, die mir im Zusammenhang mit SQL-92 in den Sinn käme.

                  Aber egal. Gibt es außer diesen eher subjektiven Gründen ("grauenhafte Unlesbarkeit" + "ANSI-Standard"-Autoritätsargument) auch objektive, warum man (innere) Joins ohne explizite JOIN-Klausel meiden sollte? Ich konnte auf die Schnelle jetzt keine finden.
                  Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                  Kommentar


                  • #10
                    Zitat von fireweasel Beitrag anzeigen
                    Hmmm, aber der Typ des Joins ändert sich doch nicht durch eine andere Schreibweise. Er bleibt derselbe gewöhnliche Equi-Join, egal wie ich ihn notiere ...
                    Ja, aber die Lesbarkeit ist beim ANSI-JOIN besser gegeben.

                    Zitat von fireweasel Beitrag anzeigen
                    Modern wäre jetzt nicht die erste Eigenschaft, die mir im Zusammenhang mit SQL-92 in den Sinn käme.
                    Da siehst du erst wie altbacken der Theta-Style-Join wirklich ist

                    Zitat von fireweasel Beitrag anzeigen
                    Aber egal. Gibt es außer diesen eher subjektiven Gründen ("grauenhafte Unlesbarkeit" + "ANSI-Standard"-Autoritätsargument) auch objektive, warum man (innere) Joins ohne explizite JOIN-Klausel meiden sollte? Ich konnte auf die Schnelle jetzt keine finden.
                    Diese Gründe sollten eigentlich reichen.

                    Kommentar

                    Lädt...
                    X