0

mysqlクエリは私を悩ませています。ユーザーが2つのバケット(ボックス)間を行き来することでユーザーをカテゴリに割り当てることができるJavaScriptがいくつかあります。最初のバケットは、2番目のバケット(カテゴリに割り当てられている)以外のすべての人である必要があります。2番目のバケットは、カテゴリ内の人々で構成されます。したがって、2番目のクエリ(カテゴリに割り当てられている)でプルされた人を除くすべての人をプルする最初のバケットのmysqlクエリが必要です。

私はすべての人の1つのテーブルと、カテゴリに割り当てられた2番目の人を持っています。(ここでは無視されるカテゴリの3番目のテーブルもあります。)次のコードは、2番目のバケット(カテゴリ内のグループ)に対して選択されたグループを返しますが、最初のバケットについては、人を含める場合に、特定のカテゴリにすでに割り当てられているグループのみをプルしますcatpeopleテーブルにも表示されない人。

問題はNULLまたは私の結合と関係があると思いますが、それを理解することはできません。何か提案をいただければ幸いです。

id | name

catpeople

id | catid | peopleid

最初のクエリは、2番目のクエリ以外のすべての人をプルする必要がありますが、catpeopleテーブルに表示される人だけをプルします。

$sql1 = "SELECT * FROM `people` c
LEFT JOIN `catpeople` c 
on p.id = c.peopleid
WHERE catid <> '2'";

2番目のクエリは正常に機能します(カテゴリ内の人々を引っ張る)

$sql2 = "SELECT * FROM `people` p
LEFT JOIN `catpeople` c 
on p.id = c.peopleid
WHERE catid = '2'";
4

2 に答える 2

2

中にいることはあなたの内面catpeople.catid='2'になります。すべての人が条件を移動する必要がある場合:WHEREJOINON

$sql1 = "SELECT * FROM `people` p
LEFT JOIN `catpeople` c 
ON (p.id = c.peopleid AND catid <> '2')";

私があなたの質問を正しく理解した場合、このクエリを少し変更する必要があります:

$sql1 = "SELECT p.* FROM `people` p
LEFT JOIN `catpeople` c 
ON (p.id = c.peopleid AND catid <> '2')"
WHERE c.id IS NULL ; -- I guess c.id is a primary key in catpeople.
--now it returns rows in people table that have no rows 
--associated with them in catpeople (or rows with catid =2 or catid is null)
于 2012-10-06T12:06:24.427 に答える
0

LEFTJOINはとにかく人々を引っ張るでしょう。代わりにINNERJOINを使用してください。

$sql1 = "SELECT * FROM `people` c
INNER JOIN `catpeople` c 
on p.id = c.peopleid AND catid <> 2;
于 2012-10-06T12:08:20.720 に答える