Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Две таблицы - одна строка. / 16 сообщений из 16, страница 1 из 1
09.08.2013, 17:05:06
    #38361331
booben
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
Доброго времени. Вопрос такой:
Есть две таблицы в одной:
table1
id | Наименование
1 | Итем1
2 | Итем2
id уникален и не может повторяться
В другой
table2
id | Тип | значение
1 | большой | 30
1 | маленький | 15
2 | большой | 45
2 | маленький | 35

id повторяемый - одной записи из первой таблицы соответсвуют множество из второй
table1.id соотвествует table2.id

LEFT JOIN'ом можно составить такую таблицу:

Наименование| Тип | значение
Итем1 | большой | 30
Итем2 | большой | 45
Итем1 | маленький| 15
Итем2 | маленький| 35

Можно ли одним запросом составить следующую таблицу(используя только mysql, без php):

Наименование| большой | маленький
Итем1 | 30 | 15
Итем2 | 45 | 35

Даже не знаю что в поиске вбить :)
Заранее спасибо.
...
Рейтинг: 0 / 0
09.08.2013, 17:08:47
    #38361339
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
Можно. Двумя джойнами. Используйте табличные алиасы.
...
Рейтинг: 0 / 0
09.08.2013, 17:13:58
    #38361350
booben
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
Я так понял, один из вариантов:
можно составить таблицу полей второй, которая будет содержать "тип" и "значение"
, а затем выбрать Join'ом
SELECT t1.*, t2.*
FROM table1 t1
JOIN
(
SELECT id, field
FROM table2, fields
GROUP BY id
) t2
ON t1.id = t2.id;
...
Рейтинг: 0 / 0
09.08.2013, 17:17:34
    #38361354
booben
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
miksoftМожно. Двумя джойнами. Используйте табличные алиасы.
Табличные алиасы... Дело в том, что я сравнительно недавно с mysql (и с sql в целом), поэтому пока не знаю такой конструкции.
Если вы сможете привести пример конкретно с предоставленными мной данными, буду вам очень признателен.
...
Рейтинг: 0 / 0
09.08.2013, 17:19:43
    #38361361
booben
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
boobenТабличные алиасы... Дело в том, что я сравнительно недавно с mysql (и с sql в целом), поэтому пока не знаю такой конструкции. Если вы сможете привести пример конкретно с предоставленными мной данными, буду вам очень признателен.
Вы не об "table AS t" ведь говорите? :)
...
Рейтинг: 0 / 0
09.08.2013, 17:23:32
    #38361370
booben
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
SELECT DISTINCT(COLUMN_NAME) as `name`
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='table2' WHERE COLUMN_NAME!='id'
Можно вот так выбрать столбцы, но я понял вы не об этом?
...
Рейтинг: 0 / 0
09.08.2013, 18:04:25
    #38361437
booben
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
Есть такой вариант:
SELECT t1.*, t2.*
FROM table1 t1
JOIN
(
SELECT id,
MAX(IF(`тип` = 'большой', значение, NULL)) AS `большой`,
MAX(IF(`тип` = 'маленький', значение, NULL)) AS `маленький`
FROM table2
GROUP BY id
) t2
ON t1.id = t2.id;
Но это не то - я статично называю имена столбцов
Можно ли формировать динамически?
...
Рейтинг: 0 / 0
09.08.2013, 18:17:01
    #38361462
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
booben"table AS t"Да.
boobenНо это не то - я статично называю имена столбцов
Можно ли формировать динамически?Нет. SQL-запрос всегда имеет фиксированное число полей в результате. Исключение - звездочка, но она вам не поможет.
...
Рейтинг: 0 / 0
09.08.2013, 18:21:30
    #38361471
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
Код: sql
1.
2.
3.
4.
SELECT table1.`Наименование`, t2_1.`значение`, t2_2.`значение`
FROM table1
  LEFT JOIN table2 t2_1 ON table1.id=t2_1.id AND t2_1.`Тип`='большой'
  LEFT JOIN table2 t2_2 ON table1.id=t2_2.id AND t2_2.`Тип`='маленький'
...
Рейтинг: 0 / 0
09.08.2013, 18:47:25
    #38361503
booben
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
miksoftНет. SQL-запрос всегда имеет фиксированное число полей в результате. Исключение - звездочка, но она вам не поможет.
Понял, ну что ж, спасибо за помощь. Тогда во избежание кучи запросов, проще добавить новое поле в первую таблицу, сохранять в него поля второй таблицы в виде "большой: 30; маленький: 15" и парсить как строку. :)
Кеш в поле таблицы. :)
...
Рейтинг: 0 / 0
09.08.2013, 18:51:38
    #38361511
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
booben,

Недавно делал динамический запрос на MySQL, для неизвестного заранее числа колонок — посмотрите, если интересно:)

sqlfiddle.com/#!2/c0362/1
...
Рейтинг: 0 / 0
09.08.2013, 19:21:13
    #38361539
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
boobenдобавить новое поле в первую таблицу, сохранять в него поля второй таблицы в виде "большой: 30; маленький: 15" и парсить как строку. :)А вот такое поле, как раз, можно и на лету вычислять.
Код: sql
1.
2.
3.
4.
SELECT table1.`Наименование`, GROUP_CONCAT(CONCAT(table2.`Тип`,'=',table2.`значение`) ORDER BY table2.`Тип` SEPARATOR ';')
FROM table1
  LEFT JOIN table2 ON table1.id=table2.id
GROUP BY table1.id, table1.`Наименование`
...
Рейтинг: 0 / 0
12.08.2013, 17:17:07
    #38363586
booben
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
Cygapb-007,

Интересное решение, спасибо )
...
Рейтинг: 0 / 0
12.08.2013, 17:19:24
    #38363591
booben
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
miksoft,

Точно, спасибо за подсказку.
Групповой конкатенацией уже пользовался в похожей задаче.
...
Рейтинг: 0 / 0
12.08.2013, 18:49:45
    #38363711
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
miksoft,

А чего только через = и ; ? Обрамить символами json и работать дальше с нормальным json-объектом на клиенте. Нет? :)

А я слепил, за пару часов, 4 функции в класс ( jsonPair(), jsonObject(), jsonVar() и jsonArray() ), которые эти символы втыкают "автоматом" в запрос. Дополнительно учитывают свою вложенность друг в друга, делают правильное слешование как json хочет...
...
Рейтинг: 0 / 0
12.08.2013, 18:54:42
    #38363719
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы - одна строка.
Arhat109miksoft,

А чего только через = и ; ? Обрамить символами json и работать дальше с нормальным json-объектом на клиенте. Нет? :)Да как угодно. Лично я json нигде не использую, мне даже в голову не пришло json-ом форматировать.
Да и это же не готовый SQL-запрос для продакшена, а просто идейная заготовка, чтобы человек понял.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Две таблицы - одна строка. / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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