Sub-LIMIT

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

  • Sub-LIMIT

    Ich habe nun auch mal (wieder) ein Problem ...

    Es gibt eine SQL-Tabelle (A) und eine Referenz-Tabelle (B).

    Tabelle A
    - id
    - fk_b_id
    - text
    - datumzeit

    Tabelle B
    - id
    - name

    Tabelle B wird als FK genutzt.

    Es sollen aus Tabelle A nur die letzten 5 Datensätze (basierend auf "datumzeit") pro FK ausgelesen werden.

    Aktuell nutze ich diese Query.
    Code:
    SELECT
    	a.`id`,
    	b.`id`,
    	a.`text`
    	a.`datumzeit`
    FROM
    	`tabelle a` a
    		LEFT JOIN `tabelle b` b
    		ON (
    			b.`id` = a.`fk_b_id`
    		)
    Ein DATE_SUB bringt nichts, wenn zu einer FK_ID längere Zeit keine Daten enthalten sind.

    Ich habe da grad irgendwie keine Idee.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |



  • #2
    GROUP BY, ORDER und LIMIT ... sollte doch kein Problem sein oder hab ich dein Anliegen falsch verstanden?

    Kommentar


    • #3
      Das hast du vermutlich ...

      Das LIMIT bezieht sich auf die ganze Query und nicht auf die externen Referenzen. Pro externer Referenz sollen maximal x Werte gezeigt werden.
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Hallo,

        probier mal sowas in der Art:
        Code:
        set @a:=0;
        select *, @a:=(@a + 1) % 5 from (
            select * from `tabelle a` order by fk_b_id, datumzeit desc
        ) as ta
        join `tabelle b` as tb on tb.id = ta.fk_b_id
        group by concat(tb.id, '-', @a)
        order by ta.id, tb.id, datumzeit desc
        Gruß,

        Anja
        [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
          Common Queries Tree

          Kommentar


          • #6
            Zitat von onemorenerd Beitrag anzeigen
            Wenn ich das richtig verstehe, habe ich mit meinem Ansatz sogar das Performance-Problem des dortigen umgangen, ohne temporäre Tabellen zu nutzen?!?

            Edit: wäre jetzt nur die Frage, inwiefern ich durch das Subselect ein neues verursache. Kannst du das mal benchmarken, Abraxax?
            Zuletzt geändert von AmicaNoctis; 24.08.2009, 12:49.
            [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
              So .. da bin ich wieder.

              @Anja.
              Danke für deine Query, aber es scheinen die falschen Daten geliefert zu werden. Ich erhalte pro Referenz nur einen Eintrag. So etwas ähnlich habe ich schon im Einsatz mit MAX() auf der datetime-Spalte.

              @onemorenerd
              Das ist genau das was ich gesucht habe.

              @all
              Das Thema Schleifen wollte ich eigentlich vermeiden. Die Ausgabe der Daten soll nur einen kurzen Status liefern. Das wäre mit Kanonen auf Spatzen geschossen.
              @Anja. Daher habe ich auch kein Benchmark gemacht. ;-) Zumal meine Daten aktuell noch "überschaubar" sind.

              Ich werde jetzt vermutlich nur einen "Reiter" zur Ansicht pro Referenz machen. Das sollte genügen. Aktuell gibt es 5 Referenzen und 126 Hauptdatensätze.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Zitat von Abraxax Beitrag anzeigen
                Ich erhalte pro Referenz nur einen Eintrag.
                Das klingt, als hättest du "set @a:=0" vergessen. Eigentlich klappt das nämlich prima, hab mir extra deine beiden Tabellen angelegt, gefüllt und dann damit getestet.
                [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
                  Leider habe ich das nicht vergessen. ;-)

                  Was allerdings sein kann ... Ich habe natürlich nicht die echten Tabellen gepostet, sondern nur einen vereinfachte Form. Möglicherweise ist es hierbei dazu gekommen, dass ich Werte vertauscht habe. Das kann ich mir zwar nicht vorstellen, aber ausschließen kann ich es natürlich auch nicht.

                  Ich habe das Thema wie gesagt nun anders gelöst.

                  Ohne Filter, werden nur offene Punkte der Queue gezeigt. Wenn ein Filter auf eine Referenz gesetzt ist, wird die Queue dieser einen Referenz gezeigt. Das macht die Sache zusätzlich noch übersichtlicher, wie ich finde.

                  Dennoch Danke für deine/eure Hilfe!
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar

                  Lädt...
                  X