Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Прошу помощи у экспертов
есть два запроса, во обоих используется UNION ALL для того чтобы избежать условий в JOIN, хотелось бы оптимизировать оба:
$user_id - ID пользователя
1) Данный запрос извлекает всех одноклассников(личную информацию), информацию о классе и информацию в друзъях ли данный одноклассник. Далее группирует, т.к. результатом UNION будет 2 одинковых записи с отличными полями из таблицы mw_friend_requests (в одном случае будут не пустые, в другом поля будут NULL).
Отредактированно lexikon (23.09.2013 13:50:03)
Неактивен
Я вижу user_id!=$user_id, но не вижу user_id = $user_id.
Это выборка всех одноклассников для конкретного одноклассника или выборка всех одноклассников для всех одноклассников, кроме конкретного одноклассника?
Отредактированно Александр Трофимов (23.09.2013 13:41:24)
Неактивен
всех одноклассников для пользователя, user_id != $user_id для того чтобы исключить из выборки себя самого
Неактивен
Неактивен
верно, путем использования UNION в одном случае возвращаются поля NULL, в другом со значениями (status)...после чего группирую по user_id
UNION можно было бы заменить конструкцией
LEFT OUTER JOIN mw_friend_requests fr ON c.user_id = fr.receiver_id OR c.user_id = fr.sender_id
но использовать OR в джоине не хочется(да и судя по результатам будет работать дольше)
Отредактированно lexikon (23.09.2013 13:54:44)
Неактивен
Я бы пошел другим путем и начал бы с получения ID одноклассников. К таблице с ID одноклассников подвязал бы все остальное. Если их нет, то результат будет пустым.
Что-то вроде этого:
Отредактированно Александр Трофимов (23.09.2013 14:28:14)
Неактивен
Кажется выше получился запрос по всем друзьям, а не одноклассникам. +)))
Неактивен
#1222 - The used SELECT statements have a different number of columns
благодарю, но не могу запустить запрос чтобы это значило? и относительно какого запроса из топа касается - №1 или №2?
Отредактированно lexikon (23.09.2013 14:28:16)
Неактивен
lexikon написал:
#1222 - The used SELECT statements have a different number of columns
благодарю, но не могу запустить запрос чтобы это значило? и относительно какого запроса из топа касается - №1 или №2?
Это значит, что в UNION количество выбранных колонок в одном из запросов не совпадает с количеством выбранных колонок в следующем запросе.
Исправил. Но факт остается фактом — запрос выбирает только друзей. +)
Неактивен
Александр Трофимов написал:
Это значит, что в UNION количество выбранных колонок в одном из запросов не совпадает с количеством выбранных колонок в следующем запросе.
Исправил. Но факт остается фактом — запрос выбирает только друзей. +)
запрос вообще ничего не вернул )))
ну и да, надо выбрать не друзей, а всех одноклассников, и понять кто делал предложение в друзья мне, а кому я, а кто вовсе не делал никаких предложений
Неактивен
Отредактированно Александр Трофимов (23.09.2013 14:59:37)
Неактивен
lexikon написал:
Александр Трофимов написал:
Это значит, что в UNION количество выбранных колонок в одном из запросов не совпадает с количеством выбранных колонок в следующем запросе.
Исправил. Но факт остается фактом — запрос выбирает только друзей. +)запрос вообще ничего не вернул )))
ну и да, надо выбрать не друзей, а всех одноклассников, и понять кто делал предложение в друзья мне, а кому я, а кто вовсе не делал никаких предложений
Не помню, как реагирует UNION если один из запросов выдает пустой ответ.
Можешь запустить только подзапрос и посмотреть будет ли ответ?
Неактивен
И да,
Неактивен
Второй запрос будет похож на тот, что выше был по друзьям с маленькими изменениями.
Неактивен
Следующий шаг — правильные индексы. Здесь не помогу, сам пока-что вникаю. +))
Неактивен
Понравилась Ваша конструкция....переделал второй запрос на следующий вариант (работает быстрее):
Неактивен
Посмотрел Ваши запросы выше по поводу второго так полагаю relationship_type это флаг пользователя(ему дали приглашение, или он дал) - думаю очень пригодиться
По поводу первого запроса - ОГРОМНАЯ благодарность работает куда быстрее...
Неактивен
lexikon написал:
Посмотрел Ваши запросы выше по поводу второго так полагаю relationship_type это флаг пользователя(ему дали приглашение, или он дал) - думаю очень пригодиться
По поводу первого запроса - ОГРОМНАЯ благодарность работает куда быстрее...
Да, relationship_type помогает понять, кто приглашал.
Пожалуйста. +))
Неактивен
Возник еще один вопрос Опять касается темы топика...надо извлечь все диалоги с пользователями. Структура таблицы следующая:
Неактивен