l'éditeur php Yuzai est là pour vous présenter une question sur le traitement des données. Lorsque nous devons exclure d'une table les identifiants qui existent déjà dans une autre table, nous pouvons le faire via une méthode spécifique. Ce problème est très courant dans le traitement des données. Le résoudre peut nous aider à mieux organiser et traiter les données, et à améliorer l'efficacité et la précision du traitement des données. Dans le prochain article, nous détaillerons comment atteindre cet objectif en utilisant des instructions de requête spécifiques.
Les gars, j'ai encore besoin de votre aide. Mon cerveau est brisé et je ne comprends pas ce que j'ai fait de mal. J'ai 2 tables
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"`
En tant que destinataire, j'ai un identifiant d'utilisateur et je dois trouver toutes les demandes des utilisateurs entre la date de début et la date de fin, mais les demandes avec le statut « annulée » ou « refusée » doivent être exclues. Je pensais pouvoir utiliser la jointure gauche, mais cela ne fonctionne pas comme j'en ai besoin. Actuellement, j'ai la requête suivante :
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()
Actuellement, je reçois toutes les données du tableau étudiant pour la date souhaitée, mais même si le statut dans le tableau des demandes est « Annulé » ou « Rejeté », il n'est pas exclu des résultats. Si vous avez besoin d'informations supplémentaires de ma part pour vous aider, n'hésitez pas à me le faire savoir. Merci pour vos commentaires et suggestions.
Vous devez vous assurer d'appliquer correctement la clause where
pour exclure les demandes avec le statut « Annulé » ou « Rejeté ».
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()
J'utilise not exists
子查询来检查在 requests
表中具有相同 request_id
的请求,并且其状态存在于 status
en tranche. Si de telles requêtes sont trouvées dans la sous-requête, elles seront exclues du résultat final.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!