Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с SELECT запросом / 18 сообщений из 18, страница 1 из 1
12.08.2014, 11:36:02
    #38717927
onuvidelsolnce
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
Добрый день, помогите с запросом.

Пример:

Table1:Main(M)


Код: sql
1.
2.
3.
4.
5.
6.
7.
+--+-----+
|id|title|
+--+-----+
|1 |xxx  |
+--+-----+
|2 |yyy  |
+--+-----+




Table2:Other(O) (O.id_main=M.id)


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
+--+--------------+--------+------+
|id|id_main(=M.id)|id_field|value |   
+--+--------------+--------+------+
|1 |1             |1       |hhh   |
+--+--------------+--------+------+
|2 |1             |2       |ppp   |
+--+--------------+--------+------+
|3 |2             |1       | -    |
+--+--------------+--------+------+
|4 |2             |2       |nnn   |
+--+--------------+--------+------+





Желаемый результат:

Код: sql
1.
2.
3.
4.
5.
6.
+----+-------+---------------------+---------------------+
|M.id|M.title|O.value(O.id_field=1)|O.value(O.id_field=2)|
+----+-------+---------------------+---------------------+
|1   |xxx    |hhh                  |ppp                  |
|2   |yyy    | -                   |nnn                  |
+----+-------+---------------------+---------------------+




O.id_field будет от 1-5

Начало такое, а вот дальше..

Код: sql
1.
2.
3.
4.
SELECT M.id,title, O.value
FROM xxx_main M INNER JOIN xxx_other O
 ON M.id=O.id_main
.............? 



Помогите, спасибо.
...
Рейтинг: 0 / 0
12.08.2014, 18:28:24
    #38718678
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
Код: sql
1.
2.
3.
from table1
left join table2 t1
left join table2 t2
...
Рейтинг: 0 / 0
12.08.2014, 18:39:54
    #38718691
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
onuvidelsolnce,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
  M.id,
  title, 
  MAX(if(id_field=1, O.value,null) value_field_1,
  MAX(if(id_field=2, O.value,null) value_field_2
FROM 
  xxx_main M 
  JOIN xxx_other O ON M.id=O.id_main
GROUP BY  
  M.id
...
Рейтинг: 0 / 0
12.08.2014, 18:41:59
    #38718692
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
javajdbconuvidelsolnce,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
  M.id,
  title, 
  MAX(if(id_field=1, O.value,null) value_field_1,
  MAX(if(id_field=2, O.value,null) value_field_2
FROM 
  xxx_main M 
  JOIN xxx_other O ON M.id=O.id_main
GROUP BY  
  M.id



хватит давать заведомо неправильные ответы.
...
Рейтинг: 0 / 0
12.08.2014, 19:22:13
    #38718727
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
ScareCrow,


да ну? серьезно? ай-ай-ай, как нехорошо...
...
Рейтинг: 0 / 0
13.08.2014, 10:20:12
    #38719020
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
javajdbcда ну? серьезно?у вас групбай формально неправильный, поля тайтл не хватает
хотя в данном случае это ни на что не влияет
...
Рейтинг: 0 / 0
13.08.2014, 12:19:46
    #38719194
onuvidelsolnce
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
javajdbconuvidelsolnce,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
  M.id,
  title, 
  MAX(if(id_field=1, O.value,null) value_field_1,
  MAX(if(id_field=2, O.value,null) value_field_2
FROM 
  xxx_main M 
  JOIN xxx_other O ON M.id=O.id_main
GROUP BY  
  M.id



Получил 502 Bad Gateway...
...
Рейтинг: 0 / 0
13.08.2014, 13:31:38
    #38719320
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
onuvidelsolnceПолучил 502 Bad Gatewayну вот это уж точно не вина мускля
...
Рейтинг: 0 / 0
13.08.2014, 17:56:10
    #38719706
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
tanglirjavajdbcда ну? серьезно?у вас групбай формально неправильный, поля тайтл не хватает
хотя в данном случае это ни на что не влияет


аааа, так это ScareCrow просто придирается...
ничего страшного... настояшие админы должны бытъ
пунктуальными.
...
Рейтинг: 0 / 0
13.08.2014, 18:25:30
    #38719743
onuvidelsolnce
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
ScareCrowjavajdbconuvidelsolnce,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
  M.id,
  title, 
  MAX(if(id_field=1, O.value,null) value_field_1,
  MAX(if(id_field=2, O.value,null) value_field_2
FROM 
  xxx_main M 
  JOIN xxx_other O ON M.id=O.id_main
GROUP BY  
  M.id



хватит давать заведомо неправильные ответы.


Вот так пишу уже в реальной ситуации, где может быть ошибка

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT 
  C.id,
  title, 
  MAX(if(fieldsid=8, F.value,null) value_field_1,
FROM 
  xxx_content C 
  JOIN xxx_fieldsattach_values F ON C.id=F.articleid
GROUP BY  
  C.id
...
Рейтинг: 0 / 0
13.08.2014, 18:28:21
    #38719746
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
У функции MAX закрывающей скобки нету
Код: sql
1.
 MAX(if(fieldsid=8, F.value,null)) value_field_1,
...
Рейтинг: 0 / 0
13.08.2014, 18:51:52
    #38719760
onuvidelsolnce
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
miksoft,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT 
   C.id, 
   title,  
   F.value
FROM 
 xxx_content C INNER JOIN xxx_fieldsattach_values F 
   ON C.id=F.articleid
WHERE 
   C.id IN (62)



Вот эта конструкция рабочая и не вызывает, но только появляется не одна а несколько строк т.к. value имеет несколько значений для данной id=62/ Что бы все строки объеденились и создались колонки вместо лишних строк.?
...
Рейтинг: 0 / 0
13.08.2014, 18:52:47
    #38719762
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
onuvidelsolnce,

GROUP BY потерялся
...
Рейтинг: 0 / 0
14.08.2014, 00:00:41
    #38719870
onuvidelsolnce
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
Всем спасибо за решения и подсказки! Вот как работает

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT 
   C.id, 
   title,  
   MAX(if(fieldsid=8, F.value,null)) value_field_888,
FROM 
 xxx_content C INNER JOIN xxx_fieldsattach_values F 
   ON C.id=F.articleid
GROUP BY
   C.id




Но появилось одно - но. В таблице xxx_fieldsattach_values бывает так что вообще не существует значений в столбце 'value' для какой-либо строки т.е поля со значением физически в таблице еще не созданно и тогда получается так что если не существует для какого-нибудь id соответствующего значения в 'value', то все строка вообще не выводится(и таких строк достаточно много) единственный вариант пришедший мне дилетанту на ум это намеренно заполнить все поля даже пустыми значениями, но это очень долго. Подскажите как можно этого избежать и выводить всех строки даже если для какой-то строки не существует сообтветствующего значения 'value'(физически в таблице)? Спасибо.
...
Рейтинг: 0 / 0
14.08.2014, 00:08:29
    #38719872
onuvidelsolnce
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
Дополню предыдущий пост

Код: sql
1.
MAX(if(fieldsid=8, F.value,null)) value_field_888 

- этот запрос может ничего не вернуть для конкретной строки со значениями, так как его в таблице может еще не существовать и тогда получается что вся строка не выводится.
...
Рейтинг: 0 / 0
14.08.2014, 02:32:35
    #38719893
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
onuvidelsolnceДополню предыдущий пост

Код: sql
1.
MAX(if(fieldsid=8, F.value,null)) value_field_888 

- этот запрос может ничего не вернуть для конкретной строки со значениями, так как его в таблице может еще не существовать и тогда получается что вся строка не выводится.


попробуйте поменять слово INNER на LEFT
...
Рейтинг: 0 / 0
14.08.2014, 11:45:02
    #38720076
onuvidelsolnce
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
javajdbconuvidelsolnceДополню предыдущий пост

Код: sql
1.
MAX(if(fieldsid=8, F.value,null)) value_field_888 

- этот запрос может ничего не вернуть для конкретной строки со значениями, так как его в таблице может еще не существовать и тогда получается что вся строка не выводится.


попробуйте поменять слово INNER на LEFT

Спасибо! теперь все строки выводятся


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT 
   C.id, 
   title,  
   MAX(if(fieldsid=8, F.value,null)) value_field_888,
FROM 
 xxx_content C INNER LEFT xxx_fieldsattach_values F 
   ON C.id=F.articleid
GROUP BY
   C.id
...
Рейтинг: 0 / 0
14.08.2014, 11:46:12
    #38720080
onuvidelsolnce
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с SELECT запросом
Вот так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT 
   C.id, 
   title,  
   MAX(if(fieldsid=8, F.value,null)) value_field_888
  FROM 
 to333_content C LEFT JOIN to333_fieldsattach_values F 
   ON C.id=F.articleid
GROUP BY
   C.id
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с SELECT запросом / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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