COUNT über 2 Tabellen - wie geht das?!

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

  • h3ll
    antwortet
    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.

    Einen Kommentar schreiben:


  • fireweasel
    antwortet
    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.

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    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

    Einen Kommentar schreiben:


  • screamfine
    antwortet
    Vielen lieben Dank - das funktioniert!!!!

    Einen Kommentar schreiben:


  • fireweasel
    antwortet
    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
    '

    Einen Kommentar schreiben:


  • screamfine
    antwortet
    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.

    Einen Kommentar schreiben:


  • Kropff
    antwortet
    Zeig mal deine bisherigen Versuche.

    Peter

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Kropff
    antwortet
    Kennst du dich mit JOINS aus?

    Peter

    Einen Kommentar schreiben:


  • screamfine
    hat ein Thema erstellt COUNT über 2 Tabellen - wie geht das?!.

    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!
Lädt...
X