[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: выборка 2х таблиц
Страницы: 1, 2
Деня
всем привет.
Вопрос -есть 3 таблицы юзеры, группы юзеров и промежуточная для связки юзеры-группы

поля таблицы юзеры id name
поля таблицы группы id name
поля промежуточной таблицы id_user id_group
суть вопроса
как правильно составить запрос так что бы в выдаче вылезли все юзеры, но с начала те, которые принадлежат к определенной группе, а далее все те кто к ней не относится
смотрел Join но что- то не то

т.е. на руках должна получится выборка по айдишнику группы, так что бы сначала шли добавленные юзеры, а потом не добавленные
DedMorozzz
А что именно с джоином не то?

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Деня
пока додумался до такой реализации, но она кажется громоздкой


SELECT AC.id AS id, AC.name AS name
FROM `user` AS AC
LEFT JOIN `group` AS PART ON (AC.id = PART.id_usert OR AC.id != PART.id_usert)
WHERE 1 =1 GROUP BY AC.id
ORDER BY PART.group DESC
DedMorozzz
не вдаваясь в подробности по каким критериям происходит связь - всё нормально
Но таблицы на выходе получишь не 3, а 2. Ибо джоин тока 1
И громоздкости не вижу, всё норм


Посмотрел...
Цитата
(AC.id = PART.id_usert OR AC.id != PART.id_usert)

Что это? smile.gif Это же взаимоисключающие условия

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Guest
т.е. в запросе все в порядке? не смущает условие в джоине (AC.id = PART.id_usert OR AC.id != PART.id_usert)
DedMorozzz
я же дописал после smile.gif
Отредактировал свой пост

Кинь структуру таблиц - покажу запрос

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Guest
поля таблицы юзеры id name
поля таблицы группы id name
поля промежуточной таблицы id_user id_group
DedMorozzz
даже лучше так, под себя сам переделаешь
Таблицы 3 users, types, user_types

SELECT * FROM user_types
LEFT JOIN users ON user_types.user_id=users.id
LEFT JOIN types ON user_types.type_id=types.id
ORDER BY types.id = 12 DESC


_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Деня
наверно не верно объяснил
в сущности должно получится то же самое, если бы сначала были выбраны юзеры одной группы
а следующей выборкой все юезеры вне этой группы и выборки объединены
Т.е. таблица группа не нужна, для запроса нужны я полагаю 2 таблицы юзеры и таблица соотношения
DedMorozzz
Грамотно заданный вопрос - залог успеха
И на данный момент он не такой. И изначально не такой. Если 2 выборки - зачем их после в 1 объеденять, лучше сразу 1 выборку сделать.

Если не нужна таблица групп - тогда так:

SELECT * FROM user_types
LEFT JOIN users ON user_types.user_id=users.id
ORDER BY user_types.type_id = 12 DESC

Где 12 - произвольное число. Подставь туда нужное

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Guest
SELECT * FROM user_types
LEFT JOIN users ON user_types.user_id=users.id
ORDER BY user_types.type_id = 12 DESC

да но эта выборка создаст первую половину те коорые относятся к группе, а как в эту выборку после относящихся добавить те что не относятся к указанной группе?
DedMorozzz
Да ненадо ничего добавлять, там после юзеров относящихся к группе с номером 12 - будут все остальные
ORDER - это не условие выборки, это сортировка

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Guest
да круто спасибо, но на всякий случай скажу, что пришлось использовать GROUP BY user.id для отсева повторений это правильно?
деня
не знал о такой конструкции ORDER BY user_types.type_id = 12
Guest
DedMorozzz

А есть ли возможность включить выборку значение on/off т.е допустим добавить поле user_types.group_id и если оно не равно null заменять его значение на 'on'
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.