1

メンバーシップ テーブル:

CREATE TABLE `Consultant_Memberships` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `membership_url` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

Memberships_List テーブル:

CREATE TABLE `Consultant_Memberships_List` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `consultant_id` int(11) DEFAULT NULL,
  `membership_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

メンバーシップ テーブル内には、メンバーが参加できる「協会」のリストがあります。選択すると、これが次の形式で「Memberships_List」に追加されます。

  1. id - 自動インクリメント
  2. Consult_id - 協会を追加したユーザーの一意の ID
  3. Membership_id - メンバーシップ テーブルの「id」を参照します。

ユーザーがまだ選択していないメンバーシップのみをドロップダウン リストに表示できるようにしたいと考えています。これまでのところ、私は持っています:

$query = $db->query("SELECT `Consultant_Memberships.`id`, `Consultant_Memberships`.`title` `FROM `Consultant_Memberships 
WHERE NOT EXISTS (SELECT `Consultant_Memberships`.`id`, `Consultant_Memberships`.`title` 
WHERE `Consultant_Memberships`.`id` = $user_id)");

現在、このエラーが発生しており、これが正しいクエリであるかどうかもわかりません。

PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `Consultant_Memberships_List`.`id` = )' at line 1' in /Users/Sites/pages/medical.php:72
Stack trace:
#0 /Users/Sites/pages/medical.php(72): PDO->query('SELECT `Consult...')
#1 /Users/Sites/index.php(18): include('/Users/Site...')
#2 {main}
  thrown in /Users/Sites/pages/medical.php on line 72
4

4 に答える 4

1

FROMNOT EXISTSサブクエリにありません。

于 2013-02-11T14:16:11.307 に答える
0

強調表示されたクエリ部分から常に左側に注意してください。あなたの場合はどこで

SELECT `Consultant_Memberships.`id`, `Consultant_Memberships`.`title`
`FROM <--- extra backtick
`Consultant_Memberships <--- unclosed backtick

ところで、バッククォートを使いすぎないでください。あなたのフィールドのほとんどはそれらを必要としません

...そして、あなたの質問は完全にねじ込まれているようです
。私があなたの質問を理解している限り、それは

SELECT cm.id, title 
FROM Consultant_Memberships cm LEFT JOIN Consultant_Memberships_List
ON cm.id=membership_id WHERE membership_id IS NULL

あなたの質問は PDO とは何の関係もないことに注意してください。
それは明確なSQLクエリの質問です。

于 2013-02-11T12:31:23.597 に答える
0

親切にこれを試してください:

SELECT a.id, a.title 
FROM Consultant_Memberships a, Consultant_Memberships_List b
WHERE a.id <> b.consultant_id

サブクエリが表示されると、その中にテーブルを指定していないことがわかるため、構文エラーが発生する理由。

WHERE NOT EXISTS (SELECT `Consultant_Memberships`.`id`, `Consultant_Memberships`.`title` 
WHERE `Consultant_Memberships`.`id` = $user_id)

さらにサポートが必要な場合は、お知らせください...

よろしく... Mr.777

于 2013-02-11T12:54:58.000 に答える
0
SELECT `Consultant_Memberships.`id`, `Consultant_Memberships`.`title` `FROM `Consultant_Memberships 
WHERE NOT EXISTS (SELECT `Consultant_Memberships`.`id`, `Consultant_Memberships`.`title` 
WHERE `Consultant_Memberships`.`id` = $user_id)

あなたは間違った構文を持っていますこのようなものを試してください私はexectクエリを書いていませんが、SQLフィドルでチェックインしています

SELECT Consultant_Memberships.id, Consultant_Memberships.title FROM Consultant_Memberships 
WHERE NOT EXISTS (SELECT Consultant_Memberships.id, Consultant_Memberships.title from Consultant_Memberships
WHERE Consultant_Memberships.id = 1)
于 2013-02-11T12:30:31.003 に答える