Здравствуйте, Олег Гашев, Вы писали:
ОГ>Здравствуйте, Аноним, Вы писали:
А>>>>Количество nameN ограничено (разумным числом, меньше 32)?
ОГ>С чем связано число 32?
Насколько я помню — максимальное число соединений (может, уже поменялось). Можно делать извращённым способом с помощью соединений — соорудить подзапросы, которые выдают таблицу (table1_id, value) для каждого nameN. Затем сделать FULL OUTER JOIN по table1_id.
PS. Только что посмотрел на то, что требуется получить — не понял, почему value3 соответствует name2?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Олег Гашев, Вы писали:
ОГ>>Здравствуйте, Аноним, Вы писали:
А>>>>>Количество nameN ограничено (разумным числом, меньше 32)?
ОГ>>С чем связано число 32?
А>Насколько я помню — максимальное число соединений (может, уже поменялось). Можно делать извращённым способом с помощью соединений — соорудить подзапросы, которые выдают таблицу (table1_id, value) для каждого nameN. Затем сделать FULL OUTER JOIN по table1_id. А>PS. Только что посмотрел на то, что требуется получить — не понял, почему value3 соответствует name2?
name1. Смотри моё второе сообщение в ветке.
Надо получить select, отдающий
id name1 name2 name3
1 value1 value2
2 value3 value4
Есть идея сделать temp table, куда сбрасывать через insert select всю необходимую информацию. А потом вытаскивать из таблицы всё необходимое.
Здравствуйте, Олег Гашев, Вы писали:
ОГ>Надо получить select, отдающий
ОГ>id name1 name2 name3 ОГ>1 value1 value2 ОГ>2 value3 value4 ОГ>[/code]
ОГ>Плюс возможность сортировки по полю name1, name2, name3. Такое можно реализовать?
Если бы мне надо было сформировать такой отчет, я бы сделал так. Сначала 1м запросом получаем шапку таблицы:
select distinct name, 2 as ord
from table2
union
values
('id', 1)
order by 2, 1
Далее 2м запросом сами данные:
select com.id, com.name, t2.value, t_ord.value as ord
from table2 t2
right join (select * from (select id from table1) as a1, (select distinct name from table2) as a2) as com
on com.id = t2.table1_id and com.name = t2.name
left join (select table1_id, value from table2 where name = 'name1') as t_ord on t_ord.table1_id = com.id
order by ord, name
На выходе получим такой результат:
id name value ord
-- ----- ----- -----
2 name1 val3 val4
2 name2 [Null] val4
2 name3 val4 val4
1 name1 val1 [Null]
1 name2 val2 [Null]
1 name3 [Null] [Null]
Обход резалт сета при условии что формируем HTML таблицу (тоесть заполнение построчно) делается очень просто. Сортировка в запросе задается веделенным жирным условием. Разбивка на страницы тоже сложности не составит.
N>Если бы мне надо было сформировать такой отчет, я бы сделал так. Сначала 1м запросом получаем шапку таблицы: N>
N>select distinct name, 2 as ord
N>from table2
N>union
N>values
N>('id', 1)
N>order by 2, 1
N>
MySQL said: Documentation
#1064 — You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'values ( 'id' , 1 ) order by 2 , 1
LIMIT 0, 30' at line 1
ОГ> MySQL said: Documentation
ОГ>#1064 — You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'values ( 'id' , 1 ) order by 2 , 1
ОГ>LIMIT 0, 30' at line 1
Достаточно этого:
select distinct name
from table2
order by name
Я просто изначально хотел сделать все одним запросом поэтому туда попала id. Не нужна она там.