2016-08-08 9 views
1

Richtig sorry für den komplizierten Titel war nicht sicher, wie man am besten erklären.PHP/MySQL Haben einige Zeilen in SELECT-Ergebnis unterschiedliche Werte für eine bestimmte Spalte beim Sortieren

Ich habe die folgende Abfrage:

SELECT * FROM uc_posts WHERE `postinguser` = 5 AND `id` NOT IN (SELECT dwable FROM uc_redwables WHERE redwabledby = 5) 
UNION ALL 
SELECT * FROM uc_posts WHERE id IN (SELECT dwable FROM uc_redwables WHERE redwabledby = 5) 
ORDER BY time DESC LIMIT 20 

Die Tabelle uc_posts wie folgt aussieht:

id | postinguser | time    | message | 
1  5   2016-08-08 23:50:45  * 
2  5   2016-08-08 23:50:35  * 
3  5   2016-08-08 23:50:25  * 
4  5   2016-08-08 23:50:15  * 

Die Tabelle uc_redwables wie folgt aussieht:

id | dwable | redwabledby | time    | 
1  3   5   2016-08-08 23:51:15  

Die Ausgabe sieht wie folgt aus :

Ich versuche eine Möglichkeit zu finden, die Zeit in der ausgewählten Zeile (n) aus der uc_redwables Tabelle zu ersetzen und die entsprechende Zeile damit zu sortieren (ohne diese Zeile tatsächlich in uc_posts zu aktualisieren).

Damit es so aussehen würde:

id | postinguser | time    | message | 
3  5   2016-08-08 23:51:15  *  //time changed 
1  5   2016-08-08 23:50:45  * 
2  5   2016-08-08 23:50:35  * 
4  5   2016-08-08 23:50:15  * 

Kann jemand helfen? Vielen Dank!

+0

statt 'select *' Liste bestimmter Felder, mit vorangestellten 'tablename.' wo, dass der Tabellenname ist das Feld von. Außer jetzt müssen Sie auf irgendeine Weise '' uc_redwables' zu Ihrer Anfrage hinzufügen. – developerwjk

Antwort

1

Try this:

SELECT 
p.`id` as id, 
p.`postinguser` as postinguser, 
p.`message` as message, 
case r.dwable 
    when p.id then r.`time` 
    else p.`time` 
    end as date_time 
FROM `uc_posts` p left join `uc_redwables` r on p.id = r.dwable 
WHERE p.`postinguser` = 5 
AND r.redwabledby = 5 
order by date_time desc; 

Dies sollte eine Ausgabe wie produzieren:

id | postinguser | date_time    | message | 
3  5   2016-08-08 23:51:15  *  
1  5   2016-08-08 23:50:45  * 
2  5   2016-08-08 23:50:35  * 
4  5   2016-08-08 23:50:15  * 
+0

Ich habe versucht, es zu laufen, aber es gibt mir immer noch die Date_time 2016-08-08 23:50:25 für ID 3. Anders als das zeigt wie zuvor gezeigt. – Ben

+0

Mein schlechtes, ich dachte, du würdest die IDs der beiden Tabellen zusammenbringen. Gerade editiert, sollte jetzt funktionieren –

+0

Noch nicht funktioniert :(Ja, es ist etwas kompliziert. Es ist im Grunde alle Zeilen von 'uc_posts ', wo der' postinguser' ist 5 und listet alle entsprechenden Zeilen von 'uc_redwables' auf, wo der' redwabledby' ist 5 während ich das Duplikat entferne und die Zeile "uc_rewables" nach ihrer Zeit sortiere. Es ist eine Retweet-ähnliche Funktion. Ich sollte hinzufügen, dass die Tabellen nicht genau gleich strukturiert sind (es gibt zusätzliche Spalten in verschiedenen Ordnungen, für die ich sie vereinfacht habe) die Frage) Würde dies den Join bewirken? – Ben