Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: выбор данных из MySQL [3]
Форумы портала PHP.SU » » Вопросы новичков » выбор данных из MySQL

Страниц (3): « 1 2 [3]
 

31. LIME - 21 Мая, 2013 - 14:55:04 - перейти к сообщению
да...действительно
по другому полю и MIN не работает
(Добавление)
так что ... подзапросы?
32. Champion - 23 Мая, 2013 - 20:09:22 - перейти к сообщению
imya пишет:
Не вижу проблемы)
Эээ. Вы доа=вольно своеобразно используете SQL. Я ваш запрос ен понимаю. И Mysql не поймет, хотя и вернет какие-то странные строки. Другие субд пошлют вас с таким запросом.
LIME пишет:
HAVING работает только с агрегирующими ф-циями
нет) С любым столбцом результирующего набора, получившимся после группирования и использования вычислимых столбцов.
(Добавление)
Сейчас напишу немного теории, а потом немного практики
(Добавление)
Как работает HAVING. Точнее, как работает запрос вообще. Сначала происходит фильтрация по условиям, указанным в WHERE и группировки. Здесь используются данные таблиц и индексов. После этого получается результирующий набор, который можно отфильтровать с помощью having. Это как будто взять в скобки наш первый запрос, написать перед скобками select * from, а после скобок where с тем условием, которое вы пытаетесь запихать в хэвинг. Попробуйте и осознаете, почему having price=min(price) не имеет особого смысла.

Теперь практика.
В mysql мы можем, например, так (в порятке предпочтения)
1. select * from tbl where price in (select min(price) from tbl union all select min(price) from tbl)
2. select * from tbl join (select min(price) minp, max(price)maxp from tbl) t ON price IN (maxp,minp)
3. Те же 2 запроса, но min и max можно заменить на order by asc/desc с limit 1 - это иногда быстрее.
4. Использовать переменную. Но это муторно, мне лень писать. Если только заинтересует.
5. Через not exists

В нек. ругих субд можно написать
select *, min(price) over(partition by Obj) minp, max(price) over(partition by Obj) maxp
from tbl
having price in (minp, maxp)
33. LIME - 23 Мая, 2013 - 21:59:23 - перейти к сообщению
спасибо
34. Saymor - 24 Мая, 2013 - 07:19:15 - перейти к сообщению
Всем спасибо! Радость
вопрос решил вот таким запросом:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3.     "SELECT *,"
  4. ."\n MIN(summa) AS summa_min"
  5. ."\n FROM table WHERE idObj=11
  6.  
  7.  


взял только минимальные значения

Огорчение всеравно как-то криво работает!
поэтому остановился на таком запросе:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM teble WHERE idObj=11 ORDER BY summa ASC LIMIT 1
  3.  
35. imya - 24 Мая, 2013 - 11:38:55 - перейти к сообщению
Champion пишет:
imya пишет:
Не вижу проблемы)
Эээ. Вы доа=вольно своеобразно используете SQL. Я ваш запрос ен понимаю. И Mysql не поймет, хотя и вернет какие-то странные строки. Другие субд пошлют вас с таким запросом.


Запросы, которые я привёл выше, корректно отработали в MS SQL Server 2008 , так что в их работоспособности я не сомневаюсь.
Я использовал именно чистый sql, возможно вы правы, что mysql не поймёт такого.
36. Champion - 24 Мая, 2013 - 14:59:13 - перейти к сообщению
Saymor пишет:
поэтому остановился на таком запросе:
Вы тогда не получите всех записей с минимальной ценой, если их больше, чем 1. Я же написал варианты, которые можно использовать.

imya пишет:
Запросы, которые я привёл выше, корректно отработали в MS SQL Server 2008 , так что в их работоспособности я не сомневаюсь.
Позвольте уличить Вас в неправде. Такие запросы не будут выполняться в MSSS. не вводите окружающих в заблуждение.
37. imya - 24 Мая, 2013 - 15:26:27 - перейти к сообщению
Champion пишет:
Позвольте уличить Вас в неправде. Такие запросы не будут выполняться в MSSS. не вводите окружающих в заблуждение.


Я имел ввиду те запросы, которые я привёл на 2 странице, не знаю о каких вы подумали Подмигивание
38. Champion - 24 Мая, 2013 - 17:12:40 - перейти к сообщению
Я про те, которые в том сообщении, которое я процитировал.
А по теме: вопрос решен? Можно закрывать?
39. Saymor - 24 Мая, 2013 - 20:08:46 - перейти к сообщению
Champion пишет:
Я про те, которые в том сообщении, которое я процитировал.
А по теме: вопрос решен? Можно закрывать?


На изначально поставленный вопрос решения не нашлось...
решение я описал выше, оно меня вполне устраивает..
40. LIME - 25 Мая, 2013 - 18:32:34 - перейти к сообщению
Saymor пишет:
На изначально поставленный вопрос решения не нашлось...
разуй глаза на 5 решений Чемпиона
Champion закрывай...ТС не помочь уже имхо))

 

Powered by ExBB FM 1.0 RC1