データベースでユーザーを検索し、それぞれに対して別のテーブルで JOIN を作成したいと考えています。ここに私のテーブルがあります:
USERS
: id
, firstname
, lastname
, [...] - ユーザーのデータを含む
FRIENDS
: fan_id
, idol_id
, [...] - どのユーザーがどのユーザーをフォローしているか
ここに私の検索クエリ、クラシックがあります:
SELECT `id`, `username`, `firstname`, `lastname`, `lang`, `twitter`, `facebook`, `picture`, `regdate`
FROM `users`
WHERE `username` LIKE ?
OR `email` LIKE ?
OR `firstname` LIKE ?
OR `lastname` LIKE ?
OR `twitter` LIKE ?
OR `facebook` LIKE ?
ORDER BY `username`;
だから今、私は、検索されたユーザーとこれを求めているユーザーとの関係を含む、友達テーブルを取得したいと考えています。
これが私が考えたことです:
SELECT `id`, `username`, `firstname`, `lastname`, `lang`, `twitter`, `facebook`, `picture`, `regdate`,
GROUP_CONCAT(
CONCAT_WS(':', `fan_id`, `idol_id`) SEPARATOR ';'
) AS relations
FROM `friends`, `users`
WHERE (`username` LIKE ?
OR `email` LIKE ?
OR `firstname` LIKE ?
OR `lastname` LIKE ?
OR `twitter` LIKE ?
OR `facebook` LIKE ?)
AND (
(`fan_id` = 100 AND `idol_id` = `id`)
OR
(`fan_id` = `id` AND `idol_id` = 100)
)
ORDER BY `username`;
relations
実際には、検索されたユーザーが表示され、fan_id
かつ検索されたユーザーが表示された場合、idol_id
またはその逆である場合に取得したいと考えています。しかし、最初のクエリでユーザーを検索すると、2 行、2 ユーザー (ids = 80
& 125
) が表示されます。2番目のクエリでは、1行しかありません(id = 80
)が、クエリの半分が機能していることをrelations
示しています...100:80;100:125
relations
参考までに、( に)ない場合の結果も知りたいので、試してみIFNULL(..., 0)
ましたが、それ以上はありません。
ご協力ありがとうございました。