Announcement

Collapse
No announcement yet.

Gruppieren mit Anzahl

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Gruppieren mit Anzahl

    Hilfe, ich bastele nun verzweifelt an meiner Abfrage rum, aber ohne Erfolg und, was viel schlimmer ist, ohne Idee zur Lösung.

    Was soll erreicht werden?
    Ich habe eine Tabelle mit diversen Spalten, ausschlaggebend ist die Spalte 'partner'. Dort stehen aktuelle Linkpartner drin, in den anderen Feldern entsprechend andere Werte.

    Nun möchte bei einer Abfrage die Ergebnisse gruppieren, aber nicht nur eine Zeile je verschiedenen Partner, sondern 3 (oder x) Zeilen je Partner. Ich hoffe, es ist klar was ich meine.

    Bisher sieht der Code so aus:
    Code:
    SELECT COUNT(ID) AS anzahl,ID,titel,beschreibung, partner,
    MATCH (titel, beschreibung) AGAINST ("irgendwas" IN BOOLEAN MODE) AS score
    FROM tabelle
    WHERE MATCH (titel, beschreibung) AGAINST ("irgendwas" IN BOOLEAN MODE)
    GROUP BY partner
    ORDER BY score DESC
    Dieser Code gibt mir zwar zu jedem Partner eine Zeile aus, aber ich möchte da 3 Zeilen (oder x Zeilen) haben.
    "A common mistake that people make
    when trying to design something completely foolproof
    is to underestimate the ingenuity of complete fools.
    "
    >>> Douglas Adams, Mostly Harmless
    -------------------------------------------------------
    Techcrawler.de | JaMT | deCHK | Extra-Bonus-Shopping.de | Scour

  • #2
    Hallo Sascha,

    dein SQL ist grundsätzlich syntaktisch falsch - auch wenn es MySQL so verarbeitet. Bei einer gruppierten Abfrage MÜSSEN in der GROUP BY-Klausel alle Spalten der SELECT-Klausel aufgeführt werden, die keine Aggregatfunktion sind. Also in deinem Fall:
    [highlight=sql]
    ...
    GROUP BY ID,titel,beschreibung, partner,
    MATCH (titel, beschreibung) AGAINST ("irgendwas" IN BOOLEAN MODE)
    ...
    [/highlight]
    Da dabei für jede Zeile als anzahl 1 rauskommt, solltest du die Spalte ID in der Abfrage auslassen.

    Evtl. löst das bereits dein Problem, ansonsten weiß ich nicht was du mit "...aber ich möchte da 3 Zeilen (oder x Zeilen) haben" meinst.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo,

      Mir ist ehrlich gesagt noch nicht ganz klar, was Du meinst.
      Aber wenn Du das erreichen willst, was ich denke, solltest Du die GROUP BY Klausel weglassen und ein LIMIT 3 anhängen...

      Den Hinweis von Falk übernehmend sollte das Dein Problem lösen.
      Wie gesagt, wenn ich Dich richtig verstanden habe...
      PHP rocks!
      Eine Initiative der PHP Community

      Comment


      • #4
        Originally posted by Falk Prüfer View Post
        Hallo Sascha,

        dein SQL ist grundsätzlich syntaktisch falsch - auch wenn es MySQL so verarbeitet. Bei einer gruppierten Abfrage MÜSSEN in der GROUP BY-Klausel alle Spalten der SELECT-Klausel aufgeführt werden, die keine Aggregatfunktion sind. Also in deinem Fall:
        [highlight=sql]
        ...
        GROUP BY ID,titel,beschreibung, partner,
        MATCH (titel, beschreibung) AGAINST ("irgendwas" IN BOOLEAN MODE)
        ...
        [/highlight]
        Da dabei für jede Zeile als anzahl 1 rauskommt, solltest du die Spalte ID in der Abfrage auslassen.
        Hallo Falk,

        danke, für die Info, dass ich alle Spalten angeben muss war mir bisher nicht bekannt, werd´s mir aber nun merken.
        Originally posted by Falk Prüfer View Post
        Evtl. löst das bereits dein Problem, ansonsten weiß ich nicht was du mit "...aber ich möchte da 3 Zeilen (oder x Zeilen) haben" meinst.
        Die Sache ist einfach zu zeigen aber schwer zu erklären.
        Es ist so, wenn ich die Abfrage ohne GROUP BY durchführe, erhalte ich als Beispiel 100 Ergebnisse, von Partner1 10, von Partner 2 15, von Partner3 40 und so weiter.
        Meine Abfrage gruppiert nun diese Zahlen zu einem Partner, so dass ich nun sagen kann, ich habe von Partner1 10 Ergebnisse und kann auch schon eines davon zeigen. Von Partner 2 habe ich 15 und kann eines zeigen usw.
        Nun möchte ich aber nicht nur ein Ergebnis zu Partner1, sondern gleich 3 (oder eben x).
        Geht das mit GROUP BY oder bin ich da komplett auf dem Holzweg.

        Ich hoffe, mein Problem nun verständlicher erklärt zu haben.
        "A common mistake that people make
        when trying to design something completely foolproof
        is to underestimate the ingenuity of complete fools.
        "
        >>> Douglas Adams, Mostly Harmless
        -------------------------------------------------------
        Techcrawler.de | JaMT | deCHK | Extra-Bonus-Shopping.de | Scour

        Comment


        • #5
          Hallo Sascha,

          nach meinem Kenntnisstand kannst du zwar das komplette Resultset in der Anzahl der DS mit LIMIT n, m einschräncken, aber auf eine "Gruppierung" läßt sich das nicht anwenden. Ich hab für MySQL auch keine Lösung mittels Subselect o.ä. Hier ist dann doch deine Anwendung gefordert die Formatierung der Ausgabe zu übernehmen.

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Originally posted by Falk Prüfer View Post
            ... Hier ist dann doch deine Anwendung gefordert die Formatierung der Ausgabe zu übernehmen.
            *hm* Hab ich mir schon fast gedacht, aber Fragen kostet ja nix. Hätte ja sein können, dass es da einen 'Kniff' gibt, mit dem man das ganze dann so ausgeben könnte. Naja, dann mache ich es eben 'umständlich' *g*.
            Danke an alle...
            "A common mistake that people make
            when trying to design something completely foolproof
            is to underestimate the ingenuity of complete fools.
            "
            >>> Douglas Adams, Mostly Harmless
            -------------------------------------------------------
            Techcrawler.de | JaMT | deCHK | Extra-Bonus-Shopping.de | Scour

            Comment

            Working...
            X