Ich habe zwei Tabellen, speichert zuerst die Ankündigungen und speichert die Liste der Benutzer, die die Ankündigungen gelesen haben. Ich versuche, alle Ankündigungen mit dem Status "gelesen" oder "ungelesen" zu erfassen. Wenn die zweite Tabelle keine Zeile user_id enthält, die dieser answer_id entspricht, ist sie ungelesen. Hier ist, wie es wieMYSQL - Wählen Sie alle Zeilen, die nicht mit anderen Tabelle
Ankündigungen sieht
id | content | announce_on
1 | foo | 2016-11-10
2 | bar | 2016-11-11
3 | zim | 2016-11-12
Ankündigung View Count
id | user_id | announcement_id
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 2 | 3
(Benutzer 1 gelesen hat Ansage 1 und 2, Benutzer 2 gelesen Ansage 1)
Die beste was ich bisher habe ist
SELECT
*,
a.id AS annId
FROM
announcement a
LEFT JOIN
announcement_view_count avc
ON
avc.announcement_id = a.id
WHERE
a.announce_on <= CURRENT_DATE AND (avc.user_id = 1 OR avc.user_id IS NULL)
Das Problem ist, dass ich Ankündigung 3 überhaupt nicht erhalten werde. Der avc.user_id IS NULL
Teil funktioniert nicht richtig. Ankündigung 3 wird nicht angezeigt, weil sie von Benutzer 2 angezeigt wurde.
Es ist schwer zu erklären, aber ich möchte alle Ankündigungen laden und habe eine Spalte, die mir sagen könnte, ob die Ankündigung von einem bestimmten Benutzer angesehen wurde. (Wer ist ID ist verfügbar). Kann mir jemand einen Hinweis geben?
Ich habe auch versucht, nicht EXISTS und nicht in, aber sie geben leere Ergebnisse zurück.
niemand Ihre Frage versuchen kann, weil die Tabellen, die Sie nicht mit der Abfrage übereinstimmen – e4c5
Ihre „bisher Beste“ geschrieben haben, ist Verweise auf Spaltennamen zu machen, dass Sie nicht in zur Verfügung gestellt haben deine Beschreibung. Basierend auf den von Ihnen bereitgestellten Tabellendaten, was haben Daten damit zu tun? Müssen Sie uns mehr erzählen, oder haben Sie bereits, was Sie beabsichtigt haben? Ich sehe nur zwei Tabellen mit je 3 Spalten. – TimBrownlaw
Entschuldigung. Ich wollte keine unnötigen Spalten einfügen. Bitte überprüfen Sie erneut – VeeK