То, что я в конечном итоге делает принимает два запроса SQL и с помощью array_intersect()
в PHP, чтобы отфильтровать результаты:Объединение двух сложных запросов
$sql1 = 'SELECT z.*, u.username, u.user_colour, u.username_clean, u.user_avatar, u.user_avatar_type
FROM ' . ZEBRA_TABLE . ' z, ' . USERS_TABLE . ' u
WHERE ((z.user_id = ' . $user->data['user_id'] . '
AND z.friend = 1
AND u.user_id = z.zebra_id)
OR (z.zebra_id = ' . $user->data['user_id'] . '
AND z.friend = 1
AND u.user_id = z.user_id))
ORDER BY u.username_clean ASC';
$sql2 = 'SELECT z.*, u.username, u.user_colour, u.username_clean, u.user_avatar, u.user_avatar_type
FROM ' . ZEBRA_TABLE . ' z, ' . USERS_TABLE . ' u
WHERE ((z.user_id = ' . $user_id . '
AND z.friend = 1
AND u.user_id = z.zebra_id)
OR (z.zebra_id = ' . $user_id . '
AND z.friend = 1
AND u.user_id = z.user_id))
ORDER BY u.username_clean ASC';
Структура обоих запросов одинаковы и разница лишь в том $user->data['user_id]
(первое лицо) заменяется на $user_id
(второе лицо) во втором запросе. Я хочу, чтобы друзья, которых у обоих пользователей есть, есть. Может ли кто-нибудь объединить это в один запрос, чтобы мне не пришлось использовать два запроса и вызывать array_intersect()
?
Какой вкус SQL ты используешь? Поддерживает ли он оператор INTERSECT? – FrustratedWithFormsDesigner
MySQL. Я никогда не знал об операторе INTERSECT. –
Обычная таблица отношений «многие-ко-многим» с двумя (или несколькими элементами): см. Http://stackoverflow.com/questions/477006/sql-statement-join-vs-group-by-and-having/477013 # 477013 – Wrikken