2013-09-05 3 views
1

Je veux rejoindre 2 tables. Celle-ci contient les utilisateurs et les autres rendez-vous - la table des rendez-vous contient 3 colonnes (ApID, qui est la clé primaire), bookFrom, bookedFor - ces 2 dernières colonnes référencent la table des utilisateurs et je pense que self_explanatory est facile à comprendre. Voici les tables en détail:Message d'erreur MySQL, code d'erreur 1064, LIMIT 20 OFFSET 0

CREATE TABLE `users` (
`user_ID` int(11) NOT NULL AUTO_INCREMENT, 
`name` varchar(45) NOT NULL, 
`lastname` varchar(45) NOT NULL, 
`email` varchar(255) DEFAULT NULL, 
`password` varchar(100) DEFAULT NULL, 
`hash` varchar(32) DEFAULT NULL, 
`usertype` enum('1','2','3','4') DEFAULT NULL, 
PRIMARY KEY (`user_ID`), 
KEY `fk_users_usertype1_idx` (`usertype`), 
CONSTRAINT `fk_users_usertype1` FOREIGN KEY (`usertype`) REFERENCES `usertype` (`type_id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 

    CREATE TABLE `appointments` (
`apID` int(11) NOT NULL AUTO_INCREMENT, 
`Bookfrom` int(11) , 
`bookedfor` int(11) , 
PRIMARY KEY (`apID`), 
KEY `fk_appointments_user1_idx` (`Bookfrom`), 
KEY `bokkedfor` (`bookedfor`), 
CONSTRAINT `appointments_ibfk_3` FOREIGN KEY (`bookedfor`) REFERENCES `users` (`user_ID`) ON DELETE CASCADE ON UPDATE CASCADE, 
CONSTRAINT `appointments_ibfk_2` FOREIGN KEY (`Bookfrom`) REFERENCES `users` (`user_ID`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 

Ce que je suis en train de trouver est si un utilisateur spécifique (que l'utilisateur dispose d'un e-mail de [email protected]) est indiqué dans le tableau des nominations (sens a réservé une rendez-vous) et je suis en train de faire avec cette déclaration:

select appointments.Bookfrom,appointments.Bookedfor 
from appointments,users 
where users.email='[email protected]' 
and appointments.Bookfrom=users.user_ID, 
appointments.Bookedfor=users.user_ID; 

Mais je reçois le message suivant:

code d'erreur 1064, état SQL 42000: Vous avez une erreur dans votre SQL syntaxe; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près « appointments.Bookedfor = utilisateurs.id_utilisateur 20 LIMITE OFFSET 0 » à la ligne 4

On peut se demander pourquoi 2 colonnes bookedfrom et bookedfor . La raison en est que dans la table des utilisateurs il y a 2 types d'utilisateurs, business et utilisateurs réguliers, donc la logique est un utilisateur régulier qui réserve un rendez-vous pour un business.I ne suis pas sûr que ce soit le bon design db pour l'occasion mais est une discussion différente

Répondre

0

Je suppose que vous voulez un OR là. Ou vous pourriez faire ceci:

... AND users.user_ID IN (appointments.Bookfrom,appointments.Bookedfor) 
0

Il vous manque un opérateur dans votre clause where:

select appointments.Bookfrom,appointments.Bookedfor 
from appointments,users 
where users.email='[email protected]' 
and appointments.Bookfrom=users.user_ID, 
appointments.Bookedfor=users.user_ID; 

Essayez ceci:

select appointments.Bookfrom,appointments.Bookedfor 
from appointments,users 
where users.email='[email protected]' 
and (appointments.Bookfrom=users.user_ID 
or appointments.Bookedfor=users.user_ID); 
+0

Il y a une autre question que je voudrais faire par rapport à la requête ci-dessus cependant. La requête ci-dessus renvoie 2 colonnes. Il recherche l'utilisateur avec l'email ci-dessus dans 2 colonnes. Il est possible en utilisant la même requête (et un certain code php) d'apprendre EXACTEMENT dans quelle colonne (bookfrom ou bookedfor) l'utilisateur ci-dessus apparaît? Ou dois-je écrire deux requêtes pour une telle tâche? –