1

2つのテーブルに参加したいです。1 つはユーザーを含み、もう 1 つの予定 - 予定テーブルには 3 つの列 (主キーである ApID)、bookFrom、bookedFor - これらの最後の 2 列はユーザ​​ー テーブルを参照します。詳細な表は次のとおりです。

    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

私が見つけようとしているのは、特定のユーザー (そのユーザーが papageorgiou40@testmail.com の電子メールを持っている) が予定表にリストされているかどうか (予定を予約したことを意味します) であり、次のステートメントでこれを実行しようとしています:

select  appointments.Bookfrom,appointments.Bookedfor 
from appointments,users 
where users.email='papageorgiou40@test.com' 
and appointments.Bookfrom=users.user_ID,
appointments.Bookedfor=users.user_ID;

しかし、次のメッセージが表示されます。

エラー コード 1064、SQL 状態 42000: SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを参照してください

なぜ 2 つの列が予約元と予約済みなのか不思議に思うかもしれません。その理由は、users テーブルには、ビジネス ユーザーと通常ユーザーの 2 種類のユーザーが存在するためです。そのため、ロジックは、ビジネスの予定を予約する通常ユーザーです。これが適切なデータベース設計であるかどうかはわかりませんが、は別の議論です

4

2 に答える 2

0

私はあなたORがそこに欲しいと推測しています。または、次のようにすることもできます。

... AND users.user_ID IN (appointments.Bookfrom,appointments.Bookedfor)
于 2013-09-05T11:23:06.110 に答える
0

where句に演算子がありません:

select  appointments.Bookfrom,appointments.Bookedfor 
from appointments,users 
where users.email='papageorgiou40@test.com' 
and appointments.Bookfrom=users.user_ID,
appointments.Bookedfor=users.user_ID;

代わりにこれを試してください:

select  appointments.Bookfrom,appointments.Bookedfor 
from appointments,users 
where users.email='papageorgiou40@test.com' 
and (appointments.Bookfrom=users.user_ID
or appointments.Bookedfor=users.user_ID);
于 2013-09-05T11:24:02.907 に答える