MySQL Zwei Datenbanken, sortiert nach einer Spalte in einem Fall, sortiert nach einer anderen Spalte in einem anderen Fall

8

Ich habe zwei Tische. Die erste Tabelle sieht so aus:

Tabelle: Datensätze

%Vor%

Tabelle: Likes

%Vor%

In der Tabelle 'Records' wird 'rid' als primärer Index festgelegt. In der Tabelle 'Likes' wird ID als primärer Index festgelegt.

Ich benutze PHP. PHP stellt MySQL einen Wert zur Verfügung, den es als Referenz verwenden kann. Ich hätte gerne eine einzige MySQL-Abfrage, die Folgendes macht:

Pseudocode:

%Vor%

Sehen Sie sich die oben angegebene $ SQL-Abfrage an. Das ist mein Versuch, die Suchanfrage zu entwickeln, die ich wollte, aber sie hat nicht das erreicht, wonach ich gesucht habe. es kam verdammt nah, aber es ordnete immer noch falsch. Die Abfrage wurde so gut ich konnte zuerst entwickelt, dann basierend auf dem, was ich gefunden habe, indem ich nach einer Lösung auf StackFlow und anderswo auf Google gesucht habe.

Das sind die Bedingungen, unter denen ich versuche, es zu bestellen:

  1. Alle ausgewählten Datensätze müssen öffentlich sein (records.public = 1).
  2. Wenn der Datensatz dem Benutzer gehört (in diesem Beispiel 212), ordnen Sie die Datensätze nach records.whenadded an.
  3. Wenn der Datensatz nicht zu dem Benutzer gehört, aber ein Datensatz, den der Benutzer mochte, dann ordnen Sie die Datensätze nach likes.whenliked.
  4. Daten werden von Neuesten zu Ältesten geordnet.

Das Endergebnis der zurückgegebenen Abfrage würde wie folgt aussehen (denken Sie daran, wenn es nicht in den Rückgabedaten ist, ist es nur als Referenz da, damit Sie sehen, wie es geordnet ist):

%Vor%

Ich hoffe, das macht Sinn. Fühlen Sie sich frei, Fragen zu stellen, ich werde das Beste klären, was ich kann.

Vielen Dank im Voraus für Ihre Zeit, Ihre Überlegung und für das Lesen. Auch wenn es keine Antwort oder keine Lösung gibt, wird Ihre Zeit immer noch sehr geschätzt! :)

    
Don Cullen 06.07.2012, 06:44
quelle

4 Antworten

4

Das von Ihnen bestellte Feld muss kein vorhandenes Feld in der Datenbank sein. Sie können auch ein Feld verwenden, das Sie in Ihrer Auswahl definiert haben:

%Vor%

Jetzt können Sie es in der Reihenfolge nach Teil verwenden:

%Vor%

Aus dem MySQL Handbuch :

  

Ein select_expr kann einen Alias ​​mit AS alias_name erhalten. Der Aliasname wird als Spaltenname des Ausdrucks verwendet und kann in GROUP BY-, ORDER BY- oder HAVING-Klauseln verwendet werden

    
Dan 06.07.2012, 06:53
quelle
1

Ich würde vorschlagen, die Abfrage in zwei Abfragen zu trennen und stattdessen UNION zu verwenden.

%Vor%

BEARBEITET: Bitte beachten Sie Ссылка

    
sel 06.07.2012 06:51
quelle
0

Wie wäre es damit:

%Vor%

Dies wird die Datensätze nach Benutzer und Likes-by-user zuerst und dann nach dem Datum trennen.

    
Stegrex 06.07.2012 06:56
quelle
0

Laut meinem Kommentar ist hier eine weitere Abfrage, die Sie sich ansehen sollten:

%Vor%

Es nimmt an, dass Sie nicht mehr als einmal eine Aufzeichnung mögen und Fahrt der merkwürdigen DISTINCT bekommen.

Dokumentation für COALESCE ist hier .

Diese Abfrage ist nicht wirklich leistungsbezogen. Wenn Sie eine wirklich große Datenbank haben, können Sie die Abfrage in zwei Teile aufteilen, um die Indizes für die Benutzer-ID mit voller Leistung zu verwenden und sie dann erneut zu verbinden.

    
Olivier Coilland 06.07.2012 07:23
quelle

Tags und Links