내 데이터베이스에서 사용자를 검색하고 각각에 대해 다른 테이블에 JOIN ON을 만들고 싶습니다.MySQL - Like + JOIN
USERS
: 여기 내 테이블입니다 id
, firstname
, lastname
, [...] - 사용자의 데이터
FRIENDS
fan_id
,
idol_id
이, [...]이 - 사용자가 다음을하는 사용자
나는 관계 betwe를 포함하는 얻을 친구 테이블에 원하는, 그래서 지금
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`;
:
여기 내 검색 쿼리, 고전 검색 한 사용자와이를 요구하는 사용자. 검색된 사용자가 fan_id
및 idol_id
또는 반대로으로 검색 사용자로 나타나는 경우
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
에 싶어 : 여기
내가 생각하는 것이다. 하지만 첫 번째 쿼리를 사용하여 사용자를 검색하면 2 명의 사용자가 있습니다 (ids = 80
& 125
). 두 번째 쿼리와 함께, 난 단지 1 행 (ID = 80
)가 있지만, relations
나는 또한 그 결과 만약을 갖고 싶어, 내가 작업 쿼리의 절반을 말한다 100:80;100:125
... 내용
을 보여주고있다 (relations
에서) 아니기 때문에 IFNULL(..., 0)
을 시도했지만 더 이상 설명하지 않았습니다.
도움 주셔서 감사합니다.
실제로 원하는 것을 이해하는 것은 정말 어렵습니다. fan_id는 자신과 다른 사용자 간의 관계를 확인하는 사용자의 ID입니까? 그리고 검색 대상 사용자가 검색을 수행하는 사용자의 팬인지 우상인지를 사용자가보고 싶습니까? 왜 당신은이 결과를 연결하고 있습니까? 두 열, 즉 우상과 부채를 두 개씩 갖고 사실이든 거짓이든 상관없는 이유는 무엇입니까? – mrmryb
네, 죄송합니다. 사실 저는 사용자를 검색하고 사용자를 검색하는 사용자와 관계를 맺고 싶습니다. 그럼 PHP에서는, 그냥 관계를 계산해야합니다 (2는 서로를 따라 가며, 1은 내가 따르고있는 사람을 확인해야한다는 것을 의미합니다) – Max13
나는 당신을 위해 생각해 낸 또 다른 쿼리를 포함하도록 내 대답을 편집했습니다. – mrmryb