[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос по сложной выборке с сортировкой
vuler
Добрый день.
Есть две таблицы.
1-я со списком пользователей users
id
name
secondname и т.д.
2-я с контактами users_contacts
id(он же номер пользователя из 1-й таблицы)
type - Тип контакта(может быть равно phone,skype,icq и т.д.)
value - значение контакта.
Например
1 phone 4955873351
1 phone 49558742652
1 skype ssdd1984
1 icq 56696
2 phone 68866
2 skype 5897851
и т.д.
Нужна выборка всех пользователей из 1-й таблицы, с сортировкой по номеру телефона. Как это можно сделать?
Вот пример выборки
SELECT SQL_CALC_FOUND_ROWS users.id,users.gender,users.login,users.secondname,GROUP_CONCAT(users_contacts.type SEPARATOR '&&&') type,GROUP_CONCAT(users_contacts.value SEPARATOR '&&&') value FROM users users LEFT JOIN users_contacts ON users_contacts.id=users.id GROUP BY users.id ORDER BY (Тут надо записать условие) LIMIT 0, 2
Немного поясню.
GROUP_CONCAT(users_contacts.type SEPARATOR '&&&') type - т.к. контактов может быть много на любого пользователя, их группируем. т.е. на выходе получаем массивы phone&&&phone&&&skype и т.д. и 4955873351&&&49558742652&&&ssdd1984 и т.д.
Проблема возникает именно в сортировке ORDER BY, т.к. задействованы сразу 2 поля.
Как я вижу выход из этой ситуации - необходимо создать какое-нибудь поле(абстрактное), которое будет опираться на 2 столба. Например:
if type=phone then new_pole=value else new_pole="" и производить сортировку по new_pole. Это вообще реально записать?
Может есть методы еще проще?
Заранее спасибо.
AllesKlar
Не совсем понятно:
Цитата
Нужна выборка всех пользователей из 1-й таблицы, с сортировкой по номеру телефона. Как это можно сделать?


С сортировкой понятно.
Не понятно с выборкой.
1. Выбрать только пользователей, у которых есть телефон?
2. Если у пользователя нет телефона, то он попадает в выборку?
3. Если у пользователя, кроме телефона, есть другие контакты, эти "другие контакты" попадают в выборку?

Если на вопросы 2 и 3 ответ "да", то
Цитата
на выходе получаем массивы phone&&&phone&&&skype и т.д. и 55873351&&&49558742652&&&ssdd1984 и т.д.

Это плохой метод. В скрипте все равно придется эти данные парсить.
Не проще ли просто получить список пользователей со всеми контактами
user_id | user_name | contact_typ | contact_value
и уже скриптом собрать из этого массив, как тебе нужно?



_____________
[продано копирайтерам]
vuler
1.Выбираются все пользователи
2.Попадает в выборку
3.Все контакты выбираются.

Тут сложность в том, что сортировок может быть несколько. Например 1-я по Городу, 2-я по номеру телефона, и там где номера телефонов
совпадают 3-я по номеру Icq и т.д. Понимаю что такой вариант маловероятен, просто чтобы пользователь мог сделать сортировку
по любому полю в получаемой итоговой таблице.

Сейчас пробую на подобии написать условие, но опять что-то не выходит
ORDER BY users_contacts.type='phone' DESC, users_contacts.value,"
Быстрый ответ:

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