count in join

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

  • Besth
    antwortet
    Vielen Dank,
    das klappt

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    Zitat von onemorenerd Beitrag anzeigen
    SELECT * FROM (SELECT * FROM aktion ORDER BY aktion_id DESC) AS foo GROUP BY aktion_topkt
    Dieser Code ist auch nur gnädigerweise in MySQL erlaubt. Es ist kein korrekter SQL-Code. In einer ordentlichen Datenbank muss im GROUP BY jedes Feld stehen, das auch im SELECT steht. Außerdem ist SELECT * böse.

    Einen Kommentar schreiben:


  • onemorenerd
    antwortet
    SELECT * FROM (SELECT * FROM aktion ORDER BY aktion_id DESC) AS foo GROUP BY aktion_topkt

    Einen Kommentar schreiben:


  • Besth
    antwortet
    also nochma anders gefragt:

    Code:
    tabelle aktion:
    aktion_id	aktion_titel	aktion_topkt
    1		aktion1		1
    2		aktion2		2
    3		aktion3		2
    4		aktion4		1
    5		aktion5		3
    wie bekomm ich da jeweils nur die letzte aktion_id zu aktion_topkt?

    Einen Kommentar schreiben:


  • Besth
    antwortet
    hm ja klar ^^
    aber wie genau sieht das ding dann aus?

    ich hab jetzt das:
    Code:
    SELECT *
    FROM db123_pkt AS pkt
    LEFT JOIN ( SELECT * FROM db123_aktion GROUP BY aktion_topkt ) AS aktion ON aktion.aktion_topkt = pkt.pkt_id
    GROUP BY aktion_topkt
    und das funktioniert auch soweit. jetzt soll nur noch ne abfrage rein wieviel aktionen es gibt ...
    also die letzte will ich anzeigen aber zusätzlich noch wieviele es überhaupt gibt

    edit: nee halt moment - das funktioniert nicht gut - der gibt mir halt immer den ersten nich den letzten :/
    Zuletzt geändert von Besth; 05.05.2010, 14:14.

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Und was ist der letzte Eintrag? Der mit der maximalen ID vielleicht?

    Einen Kommentar schreiben:


  • Besth
    antwortet
    ich versteh noch nicht ganz wie mir das left join weiter helfen soll

    SELECT s1.article, s1.dealer, s1.price
    FROM shop s1
    LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
    WHERE s2.article IS NULL;


    ich will keinen maximalen preis ich will den letzten eintrag

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Lies es dir lieber erstmal richtig durch, denn da geht es ja prinzipiell um genau das gleiche wie bei dir. Ich persönlich mag Unterabfragen nicht so und verwende lieber den negativen Left Join.

    Einen Kommentar schreiben:


  • Besth
    antwortet
    Also muss ich mir am besten ein Unterabfragen JOIN bauen ...
    wie krieg ich die denn hin, das immer nur die letzte aktion zu aktion_topkt kommt?
    so nach dem motto
    SELECT * FROM `aktion` WHERE "aktion_topkt = noch nicht in meiner liste"


    edit: is das mit group by?

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Guckst du hier: http://www.php-resource.de/forum/sql...tml#post626358

    Einen Kommentar schreiben:


  • Besth
    antwortet
    ah vielen Dank - daran lags.
    manchmal sieht man den FROM vor lauter JOIN nicht ^^

    noch eine andere Frage:
    folgende Situation
    Code:
    tabelle aktion:
    aktion_id	aktion_titel	aktion_topkt
    1		aktion1		1
    2		aktion2		2
    3		aktion3		2
    4		aktion4		1
    5		aktion5		3
    
    tabelle pkt:
    pkt_id		pkt_titel
    1		pkt1
    2		pkt2
    3		pkt3
    wenn ich meine abfrage:
    Code:
    SELECT * FROM db123_pkt AS pkt
    LEFT JOIN db123_aktion AS aktion ON aktion.aktion_topkt = pkt.pkt_id
    darauf losschick bekomm ich immer sowas wie:
    Code:
    pkt_id	pkt_titel	aktion_id	aktion_titel	aktion_topkt
    1	pkt1		1		aktion1		1
    2	pkt2		2		aktion2		2
    2	pkt2		3		aktion3		2
    1	pkt1		4		aktion4		1
    3	pkt3		5		aktion5		3
    also die pkt sind doppelt - ich will aber immer jeden punkt nur einmal und zu jedem punkt nur die letzte aktion
    wie muss ich da meine abfrage umbauen - bzw wie mach ich ein limit auf die letzte aktion? geht das überhaupt?

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Doch, schon, aber du hast einen Syntaxfehler in deinem originalen Statement und zwar an der Stelle, die dir genannt wird. Da das Statement aber nicht mit dem geposteten übereinstimmt, musst du den Fehler entweder selber finden oder auch den richtigen SQL-Code posten. Mit dem count hat es jedenfalls erstmal nichts zu tun.

    Einen Kommentar schreiben:


  • Besth
    antwortet
    oh entschuldigung.

    ich hätte gern die ausgaben
    pkt_datecreate, pkt_userid, pkt_status, pkt_prio, pkt_id, pkt_titel, aktion_anzahl
    wobei aktion_anzahl die summe aus aktion_id ist (COUNT(aktion_id) AS aktion_anzahl)
    als ausgabe bekomme ich aber nur einen fehler:
    Code:
    #1064 - You have an error in your SQL syntax;
    check the manual that corresponds to your MySQL server version for the right syntax to use near
    'LEFT JOIN edvdoku_aktion AS aktion ON aktion.aktion_topkt = pkt.pkt_id LEFT JOI' at line 2
    kann er mit dem COUNT(aktion_id) AS aktion_anzahl irgendwie nix anfangen?
    Zuletzt geändert von Besth; 05.05.2010, 13:03.

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Geht nicht ist keine Problembeschreibung. Was hättest du gern, was bekommst du stattdessen?

    Einen Kommentar schreiben:


  • Besth
    hat ein Thema erstellt count in join.

    count in join

    warum geht das nicht?
    Code:
    SELECT pkt_datecreate, pkt_userid, pkt_status, pkt_prio, pkt_id, pkt_titel, COUNT(aktion_id) AS aktion_anzahl
      FROM db123_pkt AS pkt
      LEFT JOIN db123_aktion AS aktion ON aktion.aktion_topkt = pkt.pkt_id
      LEFT JOIN db123_users AS users ON users.users_userid = pkt.pkt_userid
Lädt...
X