php-Redakteur Yuzai ist hier, um Ihnen eine Frage zur Datenverarbeitung vorzustellen. Wenn wir IDs aus einer Tabelle ausschließen müssen, die bereits in einer anderen Tabelle vorhanden sind, können wir dies mit einer bestimmten Methode tun. Dieses Problem tritt sehr häufig bei der Datenverarbeitung auf und kann uns dabei helfen, Daten besser zu organisieren und zu verarbeiten sowie die Effizienz und Genauigkeit der Datenverarbeitung zu verbessern. Im folgenden Artikel werden wir detailliert beschreiben, wie Sie dieses Ziel mithilfe spezifischer Abfrageanweisungen erreichen können.
Leute, ich brauche wieder eure Hilfe. Mein Gehirn ist kaputt und ich verstehe nicht, was ich falsch gemacht habe. Ich habe 2 Tische
requests id string `json:"id"` userid string `json:"user_id"` status string `json:"status"`
students id string `json:"id"` userid string `json:"user_id"` requestid string `json:"request_id"` startdate time.time `json:"start_date"` enddate time.time `json:"end_date"`
Als Empfänger habe ich eine Benutzer-ID und muss alle Benutzeranfragen zwischen Startdatum und Enddatum finden, aber Anfragen mit dem Status „storniert“ oder „abgelehnt“ sollten ausgeschlossen werden. Ich dachte, ich könnte Left Join verwenden, aber es funktioniert nicht so, wie ich es brauche. Aktuell habe ich folgende Abfrage:
status := []string{"canceled", declined"} type Result struct { tableName struct{} `pg:"students"` ID string `json:"id"` UserID int `json:"user_id"` RequestID string `pg:"fk:request_id"` Status string `json:"status"` } var res []Result err := Model(&res). ColumnExpr("id, user_id, requests.status"). Where("user_id = ?", UseID). Where("start_date >= ? AND end_date <= ?", startDate, endDate). Join("LEFT JOIN requests ON requests.id = request_id"). WhereIn("requests.status IN (?)", status). Select()
Derzeit erhalte ich alle Daten der Tabelle Student für den gewünschten Termin, aber auch wenn der Status in der Anfragetabelle „Storniert“ oder „Abgelehnt“ ist, wird er nicht aus den Ergebnissen ausgeschlossen. Wenn Sie weitere Informationen von mir benötigen, die mir helfen, lassen Sie es mich bitte wissen. Vielen Dank für alle Kommentare und Vorschläge.
Sie müssen sicherstellen, dass Sie die where
-Klausel korrekt anwenden, um Anfragen mit dem Status „Storniert“ oder „Abgelehnt“ auszuschließen.
type Result struct { TableName struct{} `pg:"students"` ID string `json:"id"` UserID string `json:"user_id"` RequestID string `pg:"fk:request_id"` Status string `json:"status"` } var res []Result status := []string{"canceled", "declined"} err := Model(&res). ColumnExpr("students.id, students.user_id, students.request_id, requests.status"). Where("students.user_id = ?", UserID). Where("students.start_date >= ? AND students.end_date <= ?", startDate, endDate). Where("NOT EXISTS (SELECT 1 FROM requests WHERE students.request_id = requests.id AND requests.status IN (?))", status). Select()
Ich verwende not exists
子查询来检查在 requests
表中具有相同 request_id
的请求,并且其状态存在于 status
in Scheiben. Wenn solche Anfragen in der Unterabfrage gefunden werden, werden sie vom Endergebnis ausgeschlossen.
Das obige ist der detaillierte Inhalt vonIn der ersten Tabelle vorhandene IDs müssen von der zweiten Tabelle ausgeschlossen werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!