![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Таблицы
pma написал:
uid group_id friends_ids group_name uid email phone nickname
118 1 97,116,117 NULL 97 none none aaa
118 2 116 dfgfdgf 116 iadshtf@kjsdhf.com NULL iadshtf
По моим представлениям, тут не хватает ещё 2 строчек, где group_id был бы 1, а uid 116 и 117
Неактивен
Все уехали в отпуск? ![]()
Неактивен
animegirl написал:
По моим представлениям, тут не хватает ещё 2 строчек, где group_id был бы 1, а uid 116 и 117
Ну во-первых, если вы не относите себя к нации с письмом справа налево, я бы не советовал использовать RIGHT JOIN, ибо читать его трудновато. Т.е. лучше так:
Отредактированно Shopen (21.12.2012 03:19:02)
Неактивен
Неактивен
Ну я прочитала описание того и другого, прикинула, что мне надо, и так сделала. А по поводу того, что я запрашиваю uid 118, так это с одной таблицы, а он даёт мне список других uid, которые нужно выцепить из второй таблицы.
Неактивен
LEFT JOIN и RIGHT JOIN это одно и тоже
SELECT * - так лучше не делать, _особенно_ если в разных таблицах одинаковые имена полей - путаница обеспечена
Насчет запроса действительно, ощущение что mysql выбирает только первое значение из тех что указаны в IN, если ему подставить статический список (97,116,117) то результат, который вы ожидаете. У меня пока версий нет, я так IN никогда не использовал (когда IN скармливается столбец со списком значений) может кто-то еще подскажет
Отредактированно Shopen (21.12.2012 03:30:27)
Неактивен
Было бы не приятно, вроде бы как всё по синтаксису делала ((
Неактивен

IN не интерпретирует переданные ему текстовые строки как список, а сравнивает буквально. Поэтому и остаются результаты только с точным совпадением.
Неактивен
animegirl написал:
Было бы не приятно, вроде бы как всё по синтаксису делала ((
Вообще то использовать '97,116,117' вместо простой таблицы связей, это жуткое извращение :-) (жуткое для вашей базы :-) )
Но если уже опираться на то что есть
То можно так :
Отредактированно evgeny (21.12.2012 21:25:50)
Неактивен
rgbeast написал:
IN не интерпретирует переданные ему текстовые строки как список, а сравнивает буквально. Поэтому и остаются результаты только с точным совпадением.
А нету никакой команды, которой можно было бы ему это объяснить? Вообще просто не логично, ведь вроде всё как по мануалу, список, разделён запятыми, но вот такая вот фигня выходит ![]()
Неактивен

evgeny привел выше такую команду, которая сделает требуемое
Неактивен
animegirl написал:
Запрос выдаёт, то, что надо, но почему-то не пользуется индексами в user_profile
Для того чтоб таблицы соединялись по индексам, должна быть реализована таблица связей.
user_friends
------------------
uid friend_id
118 97
118 116
118 117
Вообще не совсем понятно что за колонка group_id в таблице user_friends ? Это типо группы друзей ?
Если вы собираeтесь вынимать записи не по друзьям а по группам, то тогда структура таблицы должна быть такая
friend_groups
------------------
group_id uid
1 97
1 116
2 97
2 117
Неактивен
Признаться честно, думала, таким способом не дам таблице разрастись до слишком больших размеров, и начать тормозить. Но надо будет подумать на эту тему ![]()
Неактивен