データベースでユーザーを検索し、それぞれに対して別のテーブルで 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)ましたが、それ以上はありません。
ご協力ありがとうございました。