count in join

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

  • 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
    Mess with the Besth, die like the rest!

  • #2
    Geht nicht ist keine Problembeschreibung. Was hättest du gern, was bekommst du stattdessen?
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      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, 14:03.
      Mess with the Besth, die like the rest!

      Kommentar


      • #4
        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.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          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?
          Mess with the Besth, die like the rest!

          Kommentar


          • #6
            Guckst du hier: http://www.php-resource.de/forum/sql...tml#post626358
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              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?
              Mess with the Besth, die like the rest!

              Kommentar


              • #8
                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.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  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
                  Mess with the Besth, die like the rest!

                  Kommentar


                  • #10
                    Und was ist der letzte Eintrag? Der mit der maximalen ID vielleicht?
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      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, 15:14.
                      Mess with the Besth, die like the rest!

                      Kommentar


                      • #12
                        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?
                        Mess with the Besth, die like the rest!

                        Kommentar


                        • #13
                          SELECT * FROM (SELECT * FROM aktion ORDER BY aktion_id DESC) AS foo GROUP BY aktion_topkt

                          Kommentar


                          • #14
                            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.

                            Kommentar


                            • #15
                              Vielen Dank,
                              das klappt
                              Mess with the Besth, die like the rest!

                              Kommentar

                              Lädt...
                              X