Сложная выборка SQL

D
На сайте с 28.06.2008
Offline
980
259

Есть запрос

SELECT t1.fullname, t3.name,t3.id,t1.id as docid, t3.morpher as catMorf, t3.morpher2 as catMorf2, t4.name as nazvanie,
t2.name as city,t2.morpher as sectMorf,t2.morpher2 as sectMorf2

FROM `x_items` as t1
INNER JOIN x_sections as t2 on t2.id = t1.section_id
INNER JOIN x_categories as t3 on t3.id = t1.category_id
LEFT JOIN x_spec as t4 on t4.cat_id = t3.id

WHERE t1.fullname NOT LIKE '%.%'
AND t4.cat_id = 99
AND t3.id != 25
AND t3.id != 65
AND t3.id != 98
AND t3.id != 126
AND t3.id != 274
AND t3.id != 275
AND t3.id != 253
AND t3.id != 242
AND t3.id != 271
AND t3.id != 152
AND t1.comm = 0 limit 1

В блоке t4.name as nazvanie возможно как отсутствие вариантов (поэтому LEFT JOIN) так и более 1.

Как мне в одно поле в результате поместить все варианты если их несколько

пробовал добавлять group_concat( t4.name separator ',' ) но в результате в этом окне идете через запятую только 1-ое совпадение.

IL
На сайте с 20.04.2007
Offline
412
#1
Dram:
AND t3.id != 25
AND t3.id != 65
AND t3.id != 98
AND t3.id != 126
AND t3.id != 274
AND t3.id != 275
AND t3.id != 253
AND t3.id != 242
AND t3.id != 271
AND t3.id != 152

Так не лаконичнее?

t3.id NOT IN (25,65,98..)
Dram:
но в результате в этом окне идете через запятую только 1-ое совпадение.

Т.е. запрос без group_concat выдаёт много строк, а с ним - одну.. с одним t4.name?

Dreammaker
На сайте с 20.04.2006
Offline
553
#2
Dram:
group_concat( t4.name separator ',' )

эта функция согласно мануалу, работает для случаев, когда вы сделали Group By по другому полю.

D
На сайте с 28.06.2008
Offline
980
#3

без group_concat выдает одну строку "Витя", а с group_concat - "Витя, Витя, Витя..." (а должно быть "Витя, Маша, Петя...)

Получается одним запросом никак?

Dreammaker
На сайте с 20.04.2006
Offline
553
#4

Dram, если я правильно понимаю, для group_concat Вам нужно использовать group by в запросе, но нужно понять по какому полю группировать. Так как нет примера данных, а также примера того, что нужно получить в итоге (в табличном виде), а также что получается (в табличном виде) - подсказать что-то конкретное трудно.

Ваш текущий запрос точно не возвращает "Витя, Витя, Витя", он возвращает ещё и другие поля. А так как нет примеров, о которых я в предыдущем абзаце описал, то можно только гадать что нужно исправить.

Условно: 1) запрос выводит такой результат (копия из консоли или из MySQlAdmin), 2) Хочу получить вот такой - аналогичный пример вывод из таблице.

p.s. На время примеров уберите Limit 1 - он на этом этапе только мешает.

p.p.s Если предварительный диагноз-рекомендация, то (как пример):

t4.name  t1.fullname
Витя Иванов
Вася Петров
Вова Иванов
Саша Иванов
Женя Сидоров

Вам нужно найти поле для которое повторяются значения и для которого имена будут собиратся в кучу. То есть, здесь вот общая фамилия Иванов. Если сделать Group By t1.fullname и затем group_concat( t4.name separator ',' ), то получим примерно такое:

Витя, Вова, Саша Иванов

Вася Петров

Женя Сидоров

Это пример, нужны конкретные примеры данных для конкретной рекомендации.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий