Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод данных из нескольких таблиц определённым образом. / 22 сообщений из 22, страница 1 из 1
25.05.2018, 13:08
    #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
25.05.2018, 13:39
    #39649885
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из нескольких таблиц определённым образом.
Искать по слову PIVOT. Можно просто в этом разделе форума.
...
Рейтинг: 0 / 0
25.05.2018, 13:42
    #39649889
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из нескольких таблиц определённым образом.
...
Рейтинг: 0 / 0
25.05.2018, 13:51
    #39649897
stweet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из нескольких таблиц определённым образом.
AkinaСм. Сформировать сводную view (phpmyadmin)
Помогите повернуть таблицу
и т.д.

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

В таблице номер 2 может быть и field_3, field_4, field_n а в пиоте явно указываются значения.
Я вижу это так: Выбираем все филды дистинктом и превращаем их в заголовки таблицы, добавляем необходимые заголовки и расставляем значения в соответствии с заголовками.
...
Рейтинг: 0 / 0
25.05.2018, 14:31
    #39649936
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из нескольких таблиц определённым образом.
а зачем вам, собственно, колонки? Вам же наверняка надо готовое значение строкой, чтобы вставить куда-то
юзайте group_concat()
...
Рейтинг: 0 / 0
25.05.2018, 14:32
    #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
25.05.2018, 14:37
    #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
25.05.2018, 14:48
    #39649952
stweet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из нескольких таблиц определённым образом.
tip78а зачем вам, собственно, колонки? Вам же наверняка надо готовое значение строкой, чтобы вставить куда-то
юзайте group_concat()

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

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

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

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

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

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

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

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

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

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

Боюсь моя задача ограничена единичным запросом =(
...
Рейтинг: 0 / 0
25.05.2018, 15:36
    #39649992
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из нескольких таблиц определённым образом.
stweetмоя задача ограничена единичным запросомЗначит, можно из моего кода сформировать процедуру под именно этот запрос. Или единичный - это который один раз запустил, и больше никогда не понадобится?
...
Рейтинг: 0 / 0
25.05.2018, 15:54
    #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
25.05.2018, 17:13
    #39650045
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из нескольких таблиц определённым образом.
stweetя уже таким макаром сделал.Если ЭТОТ запрос тебя устраивает - то те ссылки, что я дал выше, подходят как нельзя лучше.
...
Рейтинг: 0 / 0
25.05.2018, 17:42
    #39650067
stweet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из нескольких таблиц определённым образом.
Akinastweetя уже таким макаром сделал.Если ЭТОТ запрос тебя устраивает - то те ссылки, что я дал выше, подходят как нельзя лучше.
Спасибо конечно. Я так далеко в sql не заглядывал. Я там реально не понимаю что к чему?!)))
...
Рейтинг: 0 / 0
25.05.2018, 18:14
    #39650093
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из нескольких таблиц определённым образом.
Чего там понимать-то? группировка да выбор максимума... проще разве что таблица умножения.
...
Рейтинг: 0 / 0
25.05.2018, 19:02
    #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
25.05.2018, 23:10
    #39650180
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных из нескольких таблиц определённым образом.
stweet, Вы даже не стесняетесь демонстрировать, что читаете ответы через слово.
Ссылк и я давал несколько раньше. И как совершенно иной тип решения, да и в общем другой задачи. Но Вы и их, видимо, тоже смотрели через слово - ведь там ну просто один в один та же задача.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод данных из нескольких таблиц определённым образом. / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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