Задавайте вопросы, мы ответим
Вы не зашли.
Таблицы
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
Неактивен
Признаться честно, думала, таким способом не дам таблице разрастись до слишком больших размеров, и начать тормозить. Но надо будет подумать на эту тему
Неактивен