Pitt: SQL-Abfrage - Top 100 sortieren

hallo,

ich steh hier gerade vor einem kleinem problem.
und zwar würde ich gerne aus meiner mysql-datenbank die top 100 datensätze anhand der downloads ausgeben lassen, diese aber nach titel sortiert.
wenn ich "order by downloads, title" angebe, bekomme ich die datensätze so sortiert, dass zuerst nach den downloads und dann nach dem titel sortiert wird, was ja auch richtig so ist, nur will ich es so haben, dass ich die top 100 einträge vor mir hab und diese dann nach dem titel sortiert werden, egal wie hoch die anzahl der downloads ist.

kleines verständnis beispiel:
so möchte ich es nicht:
Titel, Downloads
A      500
B      500
C      500
A      100
B      100
C      100

so hätte ich es gern:
Titel, Downloads
A      500
A      100
B      500
B      100
C      500
C      100

  1. Hi.

    und zwar würde ich gerne aus meiner mysql-datenbank die top 100 datensätze anhand der downloads ausgeben lassen, diese aber nach titel sortiert.

    Produziere (per Unterabfrage) eine Tabelle, die genau die gewünschten Datensätze (in beliebiger Reihenfolge) enthält - so wie Du es gemacht hast - und "SELECT"e dann daraus wiederum alle Datensätze, nach Wunsch geordnet.

    Viele Grüße,
    der Bademeister

    1. Produziere (per Unterabfrage) eine Tabelle, die genau die gewünschten Datensätze (in beliebiger Reihenfolge) enthält - so wie Du es gemacht hast - und "SELECT"e dann daraus wiederum alle Datensätze, nach Wunsch geordnet.

      hi,

      hab mich jetzt in die unterabfragen eingelesen. stehe aber immer noch vor einem problem. ich kann leider per unterabfrage nicht genau die datensätze mit den top 100 downloads ermitteln, weil man in unterabfragen kein limit benutzen kann.

      so sieht meine abfrage gerade aus:
      select * from pics where fileid IN
      (select fileid from pics order by views desc)
      order by title limit 0,100;

      ich hab in der unterabfrage nach views geordnet, weil ich mir gedacht hab dass mysql vielleicht die ersten 100 nimmt und diese dann nach titel sortiert, weil ich ja am ende ein limit von 100 hab.
      leider ist es so, dass mysql erstmal alle daten von der unterabfrage auswerten und dann erst sortiert. somit ist die obige abfrage eigentlich gleichwertig mit dieser:
      select * from pics order by title limit 0,100;

      und mit dieser abfrage wäre das problem behoben:
      select * from pics where fileid IN
      (select fileid from pics order by views desc limit 100)
      order by title limit 0,100;
      nur ist limit, wie gesagt ja nicht erlaubt.

      noch eine idee?

      mfg
      pitt

      1. Hallo,

        Produziere (per Unterabfrage) eine Tabelle, die genau die gewünschten Datensätze (in beliebiger Reihenfolge) enthält - so wie Du es gemacht hast - und "SELECT"e dann daraus wiederum alle Datensätze, nach Wunsch geordnet.

        genauso solltest Du vorgehen.

        hab mich jetzt in die unterabfragen eingelesen. stehe aber immer noch vor einem problem. ich kann leider per unterabfrage nicht genau die datensätze mit den top 100 downloads ermitteln, weil man in unterabfragen kein limit benutzen kann.

        Doch das kann man, sogar in MySQL, ich zitiere aus dem entsprechenden Handbuchabschnitt:

        <zitat>
            A subquery can contain many of the keywords or clauses that an ordinary
            SELECT can contain: DISTINCT, GROUP BY, ORDER BY, LIMIT, [...].
        </zitat>

        Nur in ganz bestimmten Fällen nicht, zum Beispiel:

        select * from pics where fileid IN
        (select fileid from pics order by views desc)
        order by title limit 0,100;

        Nein, das solltest Du nicht tun. Davon schrieb der Bademeister auch nichts. Verwende *nicht* den IN-Operator. Gehe so vor wie in diesem Archivbeitrag.

        Freundliche Grüße

        Vinzenz

        1. vielen dank für eure hilfe. jetzt funktionierts so wie ich es möchte.

          mfg
          pitt