powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом
12 сообщений из 12, страница 1 из 1
Помогите с запросом
    #38411861
ms24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Не очень силён в mysql и уже несколько часов бьюсь над одним запросом. Сам не осилил так что взываю к помощи...

есть таблица table1 (id,field11,field12,field13)
есть таблица table2 (id, table1_id, field21,field22,field23)
есть таблица param(id,table1_id,param_id,param_value)

table 1
1 'text11' 'text12' 'text13'
2 'text21' 'text22' 'text23'
3 'text31' 'text32' 'text33'

table 2
9 1 'text221' 'text222' 'text223'
10 2 'text321' 'text322' 'text333'
11 3 'text444' 'text555' 'text555'


table 2
1 1 1 'value1'
2 1 4 'value2'
3 3 8 'value3'
3 3 4 'value4'


Надо вывести все поля таблицы1 и таблицы 2 а также параметры к ним где param_id=4 or param_id=8



Т.е. вот такой результат нужен:

1 'text11' 'text12' 'text13' 'text221' 'text222' 'text223' 'value2' NULL
2 'text21' 'text22' 'text23' 'text321' 'text322' 'text333' NULL NULL
3 'text31' 'text32' 'text33' 'text444' 'text555' 'text555' 'value3' 'value4'
...
Рейтинг: 0 / 0
Помогите с запросом
    #38411906
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что именно вызывает трудности? где ТВОИ попытки решить задачу?
...
Рейтинг: 0 / 0
Помогите с запросом
    #38411924
ms24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
предполагал как то так



SELECT table1.id, table1.field11,table1.field12,table1.field13, table2.id, table2.table1_id, table2.field21,table2.field22,table2.field23, (select param.param_value from param where param_id=4 and param.table1_id=table1.id) AS P1,(select param.param_value from param where param_id=8 and param.table1_id=table1.id) AS P2
FROM table1, table2
WHERE table1.id=table2.table1_id
...
Рейтинг: 0 / 0
Помогите с запросом
    #38411936
ms24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ms24предполагал как то так



SELECT table1.id, table1.field11,table1.field12,table1.field13, table2.id, table2.table1_id, table2.field21,table2.field22,table2.field23, (select param.param_value from param where param_id=4 and param.table1_id=table1.id) AS P1,(select param.param_value from param where param_id=8 and param.table1_id=table1.id) AS P2
FROM table1, table2
WHERE table1.id=table2.table1_id

Хотя понимаю что без LEFT JOIN это в моей логике должно вывести только одну строку:

3 'text31' 'text32' 'text33' 'text444' 'text555' 'text555' 'value3' 'value4'

Но не выводится даже она
...
Рейтинг: 0 / 0
Помогите с запросом
    #38411939
ms24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нарыл ещё способ чере GROUP_CONCAT() но это не совсем то что мне надо... Не нравиться что в результате параметры выводяться в одном поле просто через запятую.
...
Рейтинг: 0 / 0
Помогите с запросом
    #38411954
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms24Нарыл ещё способ чере GROUP_CONCAT() но это не совсем то что мне надо...От него ты НИКУДА не денешься.
Структура твоей БД не гарантирует (во всяком случае не видно, где) того, что для одной и той же записи в первой таблице имеется несколько записей во второй и/или третьей таблице.

ms24предполагал как то такПодзапросы - выброси из головы. Не нужны.

ms24Хотя понимаю что без LEFT JOIN это в моей логике должно вывести только одну строку:У тебя есть исходная задача. Зачем ты вместо неё пытаешься решать совсем другую задачу? времени дофига?

ms24Надо вывести все поля таблицы1 и таблицы 2 а также параметры к ним где param_id=4 or param_id=8
Соответственно в секции FROM у тебя должны быть table1, table2 и 2 копии table3 (со своими алиасами).
...
Рейтинг: 0 / 0
Помогите с запросом
    #38411982
ms24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть подскажете как должен выглядеть запрос ?
...
Рейтинг: 0 / 0
Помогите с запросом
    #38412047
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaв секции FROM у тебя должны быть table1, table2 и 2 копии table3 (со своими алиасами).
Напишите, пожалуйста, текст этой секции.

Код: sql
1.
2.
3.
SELECT ... -- пока оставить так
FROM ... -- вот тут написать текст
WHERE ... -- эту секцию и последующие тоже пока оставить так



PS. Используйте тег SRC - для читабельности.
...
Рейтинг: 0 / 0
Помогите с запросом
    #38412242
ms24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
SELECT table1.id, table1.field11,table1.field12,table1.field13, table2.id, table2.table1_id, table2.field21,table2.field22,table2.field23, (select param.param_value from param where param_id=4 and param.table1_id=table1.id) AS P1,(select param.param_value from param where param_id=8 and param.table1_id=table1.id) AS P2
FROM table1, table2, param param1, param param2
WHERE table1.id=table2.table1_id



Так ?
...
Рейтинг: 0 / 0
Помогите с запросом
    #38412366
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже хорошо. Только алиасы бы покороче. Одна буква и одна цифра - достаточно. Да код почаще рвите энтерами, чтобы он растягивался по вертикали, а не по горизонтали.

Но это выполнено просто декартово произведение с отбором. Т.е. фактически внутреннее связывание первых двух таблиц, и уножение результата на две копии третьей.
Нам этого не надо. Нам надо взять ВСЕ записи первой таблицы, и соответствующие ей записи остальных. Значит, Left Join, как уже упоминалось. Причём первая таблица - слева.
Теперь об условиях связывания. Если первая и вторая связываются просто по значению соотвю. полей, то вот две коопии третьей... в одной из них надо отобрать только те записи, где param_id=4, во второй - соответственно где param_id=8. Это не считая равенства соответствующих полей.

Учитывая изложенное, модифицируйте секцию FROM.
...
Рейтинг: 0 / 0
Помогите с запросом
    #38412369
ms24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Идею вроде понял, буду пробовать...
Кстати, а если задача усложняется и в третьей таблице есть ещё такая запись 5 3 8 'value33' т.е. получиться что будут две разных записи с param_id=8 и надо брать то у которого id минимальный или наоборот максимальный как это сделать ?
...
Рейтинг: 0 / 0
Помогите с запросом
    #38412547
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ms24а если задача усложняетсяНе усложняется - это совершенно другая задача. И у неё свой решение.
Но сперва закончи с первой задачей. Там не всё так просто для начинающего.
Итак, где текст изменённой секции FROM?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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