|
|
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Добрый день, Не очень силён в 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' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 14:22:29 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
И что именно вызывает трудности? где ТВОИ попытки решить задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 14:52:24 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
предполагал как то так 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:03:40 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
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' Но не выводится даже она ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:08:39 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Нарыл ещё способ чере GROUP_CONCAT() но это не совсем то что мне надо... Не нравиться что в результате параметры выводяться в одном поле просто через запятую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:10:06 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
ms24Нарыл ещё способ чере GROUP_CONCAT() но это не совсем то что мне надо...От него ты НИКУДА не денешься. Структура твоей БД не гарантирует (во всяком случае не видно, где) того, что для одной и той же записи в первой таблице имеется несколько записей во второй и/или третьей таблице. ms24предполагал как то такПодзапросы - выброси из головы. Не нужны. ms24Хотя понимаю что без LEFT JOIN это в моей логике должно вывести только одну строку:У тебя есть исходная задача. Зачем ты вместо неё пытаешься решать совсем другую задачу? времени дофига? ms24Надо вывести все поля таблицы1 и таблицы 2 а также параметры к ним где param_id=4 or param_id=8 Соответственно в секции FROM у тебя должны быть table1, table2 и 2 копии table3 (со своими алиасами). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:25:08 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Может быть подскажете как должен выглядеть запрос ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 15:42:54 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Akinaв секции FROM у тебя должны быть table1, table2 и 2 копии table3 (со своими алиасами). Напишите, пожалуйста, текст этой секции. Код: sql 1. 2. 3. PS. Используйте тег SRC - для читабельности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 16:24:18 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. Так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 18:39:12 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Уже хорошо. Только алиасы бы покороче. Одна буква и одна цифра - достаточно. Да код почаще рвите энтерами, чтобы он растягивался по вертикали, а не по горизонтали. Но это выполнено просто декартово произведение с отбором. Т.е. фактически внутреннее связывание первых двух таблиц, и уножение результата на две копии третьей. Нам этого не надо. Нам надо взять ВСЕ записи первой таблицы, и соответствующие ей записи остальных. Значит, Left Join, как уже упоминалось. Причём первая таблица - слева. Теперь об условиях связывания. Если первая и вторая связываются просто по значению соотвю. полей, то вот две коопии третьей... в одной из них надо отобрать только те записи, где param_id=4, во второй - соответственно где param_id=8. Это не считая равенства соответствующих полей. Учитывая изложенное, модифицируйте секцию FROM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 21:35:16 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Идею вроде понял, буду пробовать... Кстати, а если задача усложняется и в третьей таблице есть ещё такая запись 5 3 8 'value33' т.е. получиться что будут две разных записи с param_id=8 и надо брать то у которого id минимальный или наоборот максимальный как это сделать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 21:50:43 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
ms24а если задача усложняетсяНе усложняется - это совершенно другая задача. И у неё свой решение. Но сперва закончи с первой задачей. Там не всё так просто для начинающего. Итак, где текст изменённой секции FROM? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 08:47:32 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38411861&tid=1835951]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 369ms |

| 0 / 0 |
