J'ai une ligne spécifique dans ma base de données, les informations suivantes:Comparer MySQL "Time" Champ avec chaîne en PHP
data:
user_id start_time end_time
405 12:00:00 14:00:00
Je l'instruction SELECT suivante:
SELECT *
FROM data
INNER join users on users.user_id = data.user_id
WHERE NOT EXISTS
(SELECT * FROM data
WHERE '10:00:00' BETWEEN start_time AND end_time)
GROUP BY users.usrID");
Maintenant, Je pense que cette requête retournerait la ligne ci-dessus (l'utilisateur 405), cependant, il ne renvoie personne. (Parce que 10:00:00 n'est pas entre 12:00:00 et 14:00:00).
Fait intéressant, si je change la valeur 10:00:00 à 07:00:00, cela fonctionne très bien.
Vous ne savez pas pourquoi cela ne fonctionne pas? Dans la base de données, j'ai les champs mis en place comme TIME, et ils sont formatés comme suit: 00:00:00
Merci beaucoup!
Mise à jour:
je changé ma requête autour de ressembler à ceci:
SELECT usrID,
first,
last
FROM users
WHERE user_id NOT IN (SELECT u.user_id
FROM `data` d,
`users` u
WHERE d.user_id = u.user_id
AND CAST('10:00:00' AS TIME) BETWEEN start_time AND end_time)
ORDER BY u.user_id
Et cela semblait faire l'affaire. Merci pour votre aide.
Salut Rexem. Vous avez raison d'avoir besoin de corréler la sous-requête. J'ai été capable de faire fonctionner cela dans un exemple très dépouillé. Cependant, il semble que je rencontre un problème lorsque je rejoins ma table d'utilisateurs.Il semble que la requête va correctement "laisser de côté" les éléments qui tombent sous 10:00:00. Cependant, si un utilisateur a '2' entrées dans la table, disons (10:00:00, 12:00:00) ET (13:00:00, 14:00:00), la requête va chercher le deuxième ensemble (parce que ce n'est pas entre 10:00:00) et retour que l'utilisateur est disponible. Comment puis-je résoudre ce problème de sorte que si la requête trouve un 10:00:00, il annulera complètement l'utilisateur? – Dodinas
Peu importe, je pense que je l'ai eu. S'il vous plaît voir mon explication dans mon post original ci-dessus. – Dodinas