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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: выбор данных из MySQL [3]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: выбор при помощи min() и max()
LIME
Отправлено: 21 Мая, 2013 - 14:55:04
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




да...действительно
по другому полю и MIN не работает
(Добавление)
так что ... подзапросы?

(Отредактировано автором: 21 Мая, 2013 - 15:01:38)

 
 Top
Champion Супермодератор
Отправлено: 23 Мая, 2013 - 20:09:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




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)
 
 Top
LIME
Отправлено: 23 Мая, 2013 - 21:59:23
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




спасибо
 
 Top
Saymor
Отправлено: 24 Мая, 2013 - 07:19:15
Post Id



Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Всем спасибо! Радость
вопрос решил вот таким запросом:
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.  

(Отредактировано автором: 24 Мая, 2013 - 10:45:09)

 
 Top
imya
Отправлено: 24 Мая, 2013 - 11:38:55
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




Champion пишет:
imya пишет:
Не вижу проблемы)
Эээ. Вы доа=вольно своеобразно используете SQL. Я ваш запрос ен понимаю. И Mysql не поймет, хотя и вернет какие-то странные строки. Другие субд пошлют вас с таким запросом.


Запросы, которые я привёл выше, корректно отработали в MS SQL Server 2008 , так что в их работоспособности я не сомневаюсь.
Я использовал именно чистый sql, возможно вы правы, что mysql не поймёт такого.


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Champion Супермодератор
Отправлено: 24 Мая, 2013 - 14:59:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Saymor пишет:
поэтому остановился на таком запросе:
Вы тогда не получите всех записей с минимальной ценой, если их больше, чем 1. Я же написал варианты, которые можно использовать.

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



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




Champion пишет:
Позвольте уличить Вас в неправде. Такие запросы не будут выполняться в MSSS. не вводите окружающих в заблуждение.


Я имел ввиду те запросы, которые я привёл на 2 странице, не знаю о каких вы подумали Подмигивание
Прикреплено изображение (Нажмите для увеличения)
123.PNG


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Champion Супермодератор
Отправлено: 24 Мая, 2013 - 17:12:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Я про те, которые в том сообщении, которое я процитировал.
А по теме: вопрос решен? Можно закрывать?
 
 Top
Saymor
Отправлено: 24 Мая, 2013 - 20:08:46
Post Id



Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Champion пишет:
Я про те, которые в том сообщении, которое я процитировал.
А по теме: вопрос решен? Можно закрывать?


На изначально поставленный вопрос решения не нашлось...
решение я описал выше, оно меня вполне устраивает..
 
 Top
LIME
Отправлено: 25 Мая, 2013 - 18:32:34
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Saymor пишет:
На изначально поставленный вопрос решения не нашлось...
разуй глаза на 5 решений Чемпиона
Champion закрывай...ТС не помочь уже имхо))
Тема закрыта!
 
 Top
Страниц (3): « 1 2 [3]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB