powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод данных из нескольких таблиц определённым образом.
22 сообщений из 22, страница 1 из 1
Вывод данных из нескольких таблиц определённым образом.
    #39649857
stweet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Час добрый. Прошу не пинать, я не знаю как сформулировать вопрос что задать его гуглу и объяснить поисковику по форуму то, что нужно мне. Спасибо за понимание!
В общем, есть 2 таблицы:
table 1
id option1 option_12 option_23 option_3
table 2
id field value1 field_1 value_11 field_2 value_22 field_1 value_32 field_2 value_43 field_1 value_53 field_2 value_6
мне необходимо вывести исходную таблицу:
result table
id option field_1 field_21 option_1value_1value_22 option_2value_3value_43 option_3value_5value_6

Не могу подобрать слова для изложения мысли, в терминологии веник. Да и в целом с SQL только на вы. Спасибо огромное!
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649885
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Искать по слову PIVOT. Можно просто в этом разделе форума.
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649889
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649897
stweet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaСм. Сформировать сводную view (phpmyadmin)
Помогите повернуть таблицу
и т.д.

Простите но там вообще не то. И поворачивать ни чего не надо.
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649905
stweet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaИскать по слову PIVOT. Можно просто в этом разделе форума.

В таблице номер 2 может быть и field_3, field_4, field_n а в пиоте явно указываются значения.
Я вижу это так: Выбираем все филды дистинктом и превращаем их в заголовки таблицы, добавляем необходимые заголовки и расставляем значения в соответствии с заголовками.
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649936
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем вам, собственно, колонки? Вам же наверняка надо готовое значение строкой, чтобы вставить куда-то
юзайте group_concat()
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649938
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
-- GROUP_CONCAT - лучший способ собрать телефоны в кучку: http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat
GROUP_CONCAT(DISTINCT '+7 (',t5.`code`,') ',SUBSTR(t5.`num`,1,3),'-',SUBSTR(t5.`num`,4,7) ORDER BY t5.`cnt` SEPARATOR ',<br>') AS `phone`,
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649942
stweet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78
Код: sql
1.
2.
-- GROUP_CONCAT - лучший способ собрать телефоны в кучку: http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat
GROUP_CONCAT(DISTINCT '+7 (',t5.`code`,') ',SUBSTR(t5.`num`,1,3),'-',SUBSTR(t5.`num`,4,7) ORDER BY t5.`cnt` SEPARATOR ',<br>') AS `phone`,



нет, к сожалению нужно именно так, как указанно в старте топика.
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649952
stweet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78а зачем вам, собственно, колонки? Вам же наверняка надо готовое значение строкой, чтобы вставить куда-то
юзайте group_concat()

Я вот сейчас пачку, кипу примеров просмотрел про PIVOT но ни одного примера с банальным разворотом таблицы без всяких операций. Если вы смогли бы мне развернуть вторую таблицу(без манипуляций со значениями), решение бы само всплыло на поверхность.

Вижу это примерно так.

SELECT * FROM (SELECT * FROM 'table_2' GROUP BY 'id') PIVOT (??);
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649961
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stweet,

потому что не умеет mysql pivot.
Выкручиваться можно только зная перечень значений или разворачивать на приложении уже.
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649965
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stweettip78а зачем вам, собственно, колонки? Вам же наверняка надо готовое значение строкой, чтобы вставить куда-то
юзайте group_concat()

Я вот сейчас пачку, кипу примеров просмотрел про PIVOT но ни одного примера с банальным разворотом таблицы без всяких операций. Если вы смогли бы мне развернуть вторую таблицу(без манипуляций со значениями), решение бы само всплыло на поверхность.

Вижу это примерно так.

SELECT * FROM (SELECT * FROM 'table_2' GROUP BY 'id') PIVOT (??);

ну нету у мускуля ни массивов, ни record
делайте подзапрос на каждую колонку тогда чё
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649966
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, ну да, их же непредсказуемое кол-во...
не, вам тут определённо group_concat() зарешал бы
вы вообще в курсе, что не обязательно именно в ПХП лопатить результаты, их правильнее как раз в БД сразу в нужный формат приводить
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649968
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stweetИ поворачивать ни чего не надо.Надо, милок, надо. После связывания таблиц ты получишь выборку, которую тебе и надо отпивотить.
stweetВ таблице номер 2 может быть и field_3, field_4, field_n а в пиоте явно указываются значения.А вот эти сведения ты напрасно зажал в исходном сообщении - они важны. И именно из-за них данные тебе ссылки неприменимы.
MelkijВыкручиваться можно только зная перечень значений
Именно по этой причине я написал процедуру. См. PIVOT средствами MySQL .
stweet , напрямую моя процедура тут неприменима, ибо работает с одиночной таблицей. Но это можно и поправить, не так ли? скажем, передавая не имя таблицы, а подготовленную секцию FROM.
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649974
stweet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkijstweet,

потому что не умеет mysql pivot.
Выкручиваться можно только зная перечень значений или разворачивать на приложении уже.

Спасибо! Допустим мы знаем перечень значений. Как в таком случае реализовать задачу в старте топика?
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649979
stweet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinastweetИ поворачивать ни чего не надо.Надо, милок, надо. После связывания таблиц ты получишь выборку, которую тебе и надо отпивотить.
stweetВ таблице номер 2 может быть и field_3, field_4, field_n а в пиоте явно указываются значения.А вот эти сведения ты напрасно зажал в исходном сообщении - они важны. И именно из-за них данные тебе ссылки неприменимы.
MelkijВыкручиваться можно только зная перечень значений
Именно по этой причине я написал процедуру. См. PIVOT средствами MySQL .
stweet , напрямую моя процедура тут неприменима, ибо работает с одиночной таблицей. Но это можно и поправить, не так ли? скажем, передавая не имя таблицы, а подготовленную секцию FROM.

Боюсь моя задача ограничена единичным запросом =(
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39649992
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stweetмоя задача ограничена единичным запросомЗначит, можно из моего кода сформировать процедуру под именно этот запрос. Или единичный - это который один раз запустил, и больше никогда не понадобится?
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39650002
stweet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinastweetмоя задача ограничена единичным запросомЗначит, можно из моего кода сформировать процедуру под именно этот запрос. Или единичный - это который один раз запустил, и больше никогда не понадобится?

Да я уже таким макаром сделал. А вось прокатит. (Не красиво, но иных условий не было, будем этем и бравировать).

select
table_1.id,
table_1.option,
table_2.value as field_1,
table_3.value as field_2
from
table_1
left join (select id, value from table_2 where field='field_1') as table_2 on table_2.id=table_1.id
left join (select id, value from table_2 where field='field_2') as table_3 on table_3.id=table_1.id;
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39650045
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stweetя уже таким макаром сделал.Если ЭТОТ запрос тебя устраивает - то те ссылки, что я дал выше, подходят как нельзя лучше.
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39650067
stweet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinastweetя уже таким макаром сделал.Если ЭТОТ запрос тебя устраивает - то те ссылки, что я дал выше, подходят как нельзя лучше.
Спасибо конечно. Я так далеко в sql не заглядывал. Я там реально не понимаю что к чему?!)))
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39650093
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего там понимать-то? группировка да выбор максимума... проще разве что таблица умножения.
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39650113
stweet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaЧего там понимать-то? группировка да выбор максимума... проще разве что таблица умножения.
Ну да, согласен. Тут и понимать то нечего.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
DELIMITER @@;

DROP PROCEDURE IF EXISTS pivot@@;
CREATE PROCEDURE pivot ( IN schema_name VARCHAR(64) /* database name */
                       , IN table_name VARCHAR(64)  /* table name */
                       , IN id_name VARCHAR(64)     /* row values field name */
                       , IN key_name VARCHAR(64)    /* col values field name, 
                                                           must be char or varchar type 
                                                           and <= 64 chars long */
                       , IN value_name VARCHAR(64)  /* val values field name */
                       )
pivot:BEGIN
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET @error := 1;
    SET @error := 0;
    SELECT character_maximum_length 
        INTO @maxlen 
        FROM information_schema.columns
        WHERE table_schema = schema_name
          AND table_name = table_name
          AND column_name = key_name
          AND data_type IN ('char', 'varchar');
    IF @error OR !@maxlen OR @maxlen IS NULL THEN
        SELECT '@error OR @maxlen=0 OR @maxlen IS NULL', @error, @maxlen;
        LEAVE pivot;
    END IF;
    DROP TEMPORARY TABLE IF EXISTS temp_pivot;
    SET @sql := CONCAT('CREATE TEMPORARY TABLE temp_pivot (key_name VARCHAR(',
                       @maxlen,
                       ')) ENGINE=Memory SELECT DISTINCT `',
                       key_name,
                       '` key_name FROM `',
                       schema_name,
                       '`.`',
                       table_name,
                       '`;');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DROP PREPARE stmt;
    SELECT GROUP_CONCAT(CONCAT( ', MAX(CASE `',
                                key_name,
                                '` WHEN ''',
                                temp_pivot.key_name,
                                ''' THEN `',
                                value_name,
                                '` END) `',
                                temp_pivot.key_name,
                                '`') SEPARATOR '')
        INTO @sql
        FROM temp_pivot;
    DROP TEMPORARY TABLE temp_pivot;
    SET @sql := CONCAT('SELECT `',
                       id_name,
                       '`',
                       @sql,
                       ' FROM `',
                       schema_name,
                       '`.`',
                       table_name,
                       '` GROUP BY `',
					   id_name,
					   '`;');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DROP PREPARE stmt;
    SET @error := NULL;
    SET @maxlen := NULL;
    SET @sql := NULL;
    
END pivot@@;
...
Рейтинг: 0 / 0
Вывод данных из нескольких таблиц определённым образом.
    #39650180
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stweet, Вы даже не стесняетесь демонстрировать, что читаете ответы через слово.
Ссылк и я давал несколько раньше. И как совершенно иной тип решения, да и в общем другой задачи. Но Вы и их, видимо, тоже смотрели через слово - ведь там ну просто один в один та же задача.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод данных из нескольких таблиц определённым образом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]