powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Две таблицы - одна строка.
16 сообщений из 16, страница 1 из 1
Две таблицы - одна строка.
    #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
Две таблицы - одна строка.
    #38361339
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. Двумя джойнами. Используйте табличные алиасы.
...
Рейтинг: 0 / 0
Две таблицы - одна строка.
    #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
Две таблицы - одна строка.
    #38361354
booben
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftМожно. Двумя джойнами. Используйте табличные алиасы.
Табличные алиасы... Дело в том, что я сравнительно недавно с mysql (и с sql в целом), поэтому пока не знаю такой конструкции.
Если вы сможете привести пример конкретно с предоставленными мной данными, буду вам очень признателен.
...
Рейтинг: 0 / 0
Две таблицы - одна строка.
    #38361361
booben
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
boobenТабличные алиасы... Дело в том, что я сравнительно недавно с mysql (и с sql в целом), поэтому пока не знаю такой конструкции. Если вы сможете привести пример конкретно с предоставленными мной данными, буду вам очень признателен.
Вы не об "table AS t" ведь говорите? :)
...
Рейтинг: 0 / 0
Две таблицы - одна строка.
    #38361370
booben
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT DISTINCT(COLUMN_NAME) as `name`
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='table2' WHERE COLUMN_NAME!='id'
Можно вот так выбрать столбцы, но я понял вы не об этом?
...
Рейтинг: 0 / 0
Две таблицы - одна строка.
    #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
Две таблицы - одна строка.
    #38361462
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booben"table AS t"Да.
boobenНо это не то - я статично называю имена столбцов
Можно ли формировать динамически?Нет. SQL-запрос всегда имеет фиксированное число полей в результате. Исключение - звездочка, но она вам не поможет.
...
Рейтинг: 0 / 0
Две таблицы - одна строка.
    #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
Две таблицы - одна строка.
    #38361503
booben
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftНет. SQL-запрос всегда имеет фиксированное число полей в результате. Исключение - звездочка, но она вам не поможет.
Понял, ну что ж, спасибо за помощь. Тогда во избежание кучи запросов, проще добавить новое поле в первую таблицу, сохранять в него поля второй таблицы в виде "большой: 30; маленький: 15" и парсить как строку. :)
Кеш в поле таблицы. :)
...
Рейтинг: 0 / 0
Две таблицы - одна строка.
    #38361511
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booben,

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

sqlfiddle.com/#!2/c0362/1
...
Рейтинг: 0 / 0
Две таблицы - одна строка.
    #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
Две таблицы - одна строка.
    #38363586
booben
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

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

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

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

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

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


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