Je développe un site de pigiste et dans ce site les utilisateurs (les propriétaires de projet et les experts) peuvent laisser des commentaires pour chacun. J'essaie de trouver le nombre de feedbacks en attente de partir.Requête SQL compliquée Question
Cette requête renvoie le nombre de commentaires de Watting de projet qui ont pas de commentaires dans les 30 derniers jours, ID utilisateur = 3 et avoir le code d'état approprié:
SELECT COUNT(*)
FROM projects
WHERE projects.status IN (5, 10) AND projects.status_created >= DATE_SUB('2010-12-17 21:24:51', INTERVAL 30 DAY)
AND NOT EXISTS(
SELECT * FROM
feedbacks WHERE feedbacks WHERE projects.id = feedbacks.project_id AND feedbacks.from_id = '3'
)
Cette requête est fonctionne quand nous avons seulement 2 utilisateurs dans la base de données autrement, par exemple si nous changeons l'ID utilisateur de 3 à 99 (utilisateur qui n'a pas de relation avec le projet), requête retourne toujours 1 pour le nombre, mais il devrait être de retour de 0.
Mon schéma de base de données:
PROJECTS(id, project_owner_id, project_title, ...)
FEEDBACKS(id, project_id, to_id, from_id, ....)
PROJECT_BIDS(id, project_id, bid_owner_id, accepted, ...) We can use this table for find out which user's bid is accepted then accepted bid owner have right for leave feedback.
Nous pouvons utiliser le champ project_bids.accepted pour savoir quels utilisateurs ont une relation avec le projet. Si accepté vrai, l'expert indépendant du projet est cet utilisateur. Projects.project_owner_id est également une autre colonne pour déterminer la relation.
Comment puis-je résoudre ma requête? Je vous remercie.
Peut-être qu'un pigiste pourrait vous aider? –
Votre explication des relations entre les tables serait plus claire si vous fournissiez des exemples de données pour chaque table, pour montrer ce qui ne fonctionne pas. – Gerrat