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

 PHP.SU

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


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

> Описание: выбор при помощи min() и max()
Saymor
Отправлено: 14 Мая, 2013 - 20:26:08
Post Id



Новичок


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


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




Имеется 1 таблица назовем её "table_1".
в таблице имеется сетка многочисленная цен, она хранится в поле "price"
также есть и другие поля с дынными.

Суть задачи сделать выборку min(price) и max(price), на выходе мы получим минимальное и максимальное значение поля "price" - это у меня получается, но проблема в том, чтоб получить другие строки/значения от минимального "price" и максимального "price".

как усовершенствовать данный код исходя из моей задачи?
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. SELECT min(summa) AS s_min,"
  4.     . "\n max(summa) AS s_max"
  5.     . "\n FROM table WHERE id=".$id;
  6.  
  7.  
  8.  
 
 Top
LIME
Отправлено: 14 Мая, 2013 - 20:32:07
Post Id


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


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM tbl HAVING price=MIN(price) OR price=MAX(price)
нужно учесть что дынных рядов может быть более чем по 1 шт на min и max
 
 Top
Saymor
Отправлено: 15 Мая, 2013 - 21:31:38
Post Id



Новичок


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


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




LIME пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM tbl HAVING price=MIN(price) OR price=MAX(price)
нужно учесть что дынных рядов может быть более чем по 1 шт на min и max


мне необходимо в запросе указать что-то вроде такого:
PHP:
скопировать код в буфер обмена
  1. SELECT * FROM table HAVING ( summa=MIN(summa) OR summa=MAX(summa) ) AND idObj=11


только такой запрос не работает

(Отредактировано автором: 16 Мая, 2013 - 09:36:54)

 
 Top
LifePlay
Отправлено: 16 Мая, 2013 - 09:25:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Авг. 2010  
Откуда: Кобеляки, Украина


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




Структуру таблицы покажите. Что-то не понятно.
 
 Top
Saymor
Отправлено: 16 Мая, 2013 - 09:36:13
Post Id



Новичок


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


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




LifePlay пишет:
Структуру таблицы покажите. Что-то не понятно.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. | id | idObj |  summa |
  3. -------------------------
  4. | 1  |    11 |    100 |
  5. | 2  |    11 |    200 |
  6. | 3  |    11 |    300 |
  7. | 4  |    11 |    450 |
  8. | 5  |    11 |    500 |
  9. | 6  |    11 |    590 |
  10. | 7  |    12 |    100 |
  11. | 8  |    12 |    250 |
  12. | 9  |    12 |    300 |


так лучше?
 
 Top
imya
Отправлено: 16 Мая, 2013 - 09:43:54
Post Id



Участник


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


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




А вы читали применимость HAVING?

Цитата:
HAVING <условия> аналогичен WHERE <условия> за исключением того, что строки отбираются не по значениям столбцов, а строятся из значений столбцов указанных в GROUP BY и значений агрегатных функций, вычисленных для каждой группы, образованной GROUP BY.


Сгруппируйте по суммам, должно работать.


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


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Saymor
Отправлено: 16 Мая, 2013 - 11:51:29
Post Id



Новичок


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


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




imya пишет:
Сгруппируйте по суммам, должно работать.

не получается у меня, как правильно запрос сформировать?
 
 Top
imya
Отправлено: 16 Мая, 2013 - 12:44:28
Post Id



Участник


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT  id, ibojb, summ FROM your_table
  2. GROUP BY id,Obj,  summ
  3. HAVING (sum = MIN(sum) OR sum = MAX(sum)) AND idObj = 11

(Отредактировано автором: 16 Мая, 2013 - 12:45:15)



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


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



Участник


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


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




Так мы и не узнаем, сработало или нет Растерялся


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


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



Новичок


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


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




imya пишет:
Так мы и не узнаем, сработало или нет Растерялся

прошу прощения за столь долгий ответ, работа..

спасибо вам за помощь, но ваш запрос высодит все поля по idObj =11, а надо выбрать только большее и меньшее значение:
CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [0] => stdClass Object
  3.         (
  4.             [id] => 55
  5.             [idObj] => 11
  6.             [summa] => 1000000
  7.         )
  8.  
  9.     [1] => stdClass Object
  10.         (
  11.             [id] => 164
  12.             [idObj] => 11
  13.             [summa] => 900000
  14.         )
  15.  
  16.     [2] => stdClass Object
  17.         (
  18.             [id] => 171
  19.             [idObj] => 11
  20.             [summa] => 3000000
  21.         )
  22.  
  23.     [3] => stdClass Object
  24.         (
  25.             [id] => 961
  26.             [idObj] => 11
  27.             [summa] => 2000000
  28.         )
  29.  
  30.     [4] => stdClass Object
  31.         (
  32.             [id] => 965
  33.             [idObj] => 11
  34.             [summa] => 1000000
  35.         )
  36.  
  37.     [5] => stdClass Object
  38.         (
  39.             [id] => 1001
  40.             [idObj] => 11
  41.             [summa] => 5000000
  42.         )
  43.  
  44.     [6] => stdClass Object
  45.         (
  46.             [id] => 1002
  47.             [idObj] => 11
  48.             [summa] => 4000000
  49.         )
  50.  
  51. )

(Отредактировано автором: 18 Мая, 2013 - 12:09:39)

 
 Top
imya
Отправлено: 20 Мая, 2013 - 11:15:17
Post Id



Участник


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


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




Не вижу проблемы)

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT  id, ibojb, summ FROM your_table
  2. GROUP BY id,Obj,  summ
  3. HAVING (sum = MIN(sum) OR sum = MAX(sum)) AND (idObj  < 11 OR idObj > 11)

(Отредактировано автором: 20 Мая, 2013 - 11:15:57)



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


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Saymor
Отправлено: 20 Мая, 2013 - 15:26:46
Post Id



Новичок


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


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




imya пишет:
Не вижу проблемы)

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT  id, ibojb, summ FROM your_table
  2. GROUP BY id,Obj,  summ
  3. HAVING (sum = MIN(sum) OR sum = MAX(sum)) AND (idObj  < 11 OR idObj > 11)


мне надо сделать выборку большего и меньшего значения в поле "sum" у "idObj".
в результате должно быть выведено 2 строки с данными по объекту "11"
 
 Top
LIME
Отправлено: 20 Мая, 2013 - 15:34:42
Post Id


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


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


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




Не понял еще варианты есть?
HAVING работает только с агрегирующими ф-циями
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE idObj=11 HAVING  summa=MIN(summa) OR summa=MAX(summa)

(Добавление)
Saymor пишет:
в результате должно быть выведено 2 строки
ты уверен что их будет 2 а не больше...не может быть ряда с такой же суммой?
 
 Top
Saymor
Отправлено: 20 Мая, 2013 - 19:09:06
Post Id



Новичок


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


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




LIME пишет:
Не понял еще варианты есть?
HAVING работает только с агрегирующими ф-циями
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE idObj=11 HAVING  summa=MIN(summa) OR summa=MAX(summa)

(Добавление)
Saymor пишет:
в результате должно быть выведено 2 строки
ты уверен что их будет 2 а не больше...не может быть ряда с такой же суммой?


Ваш запрос вообще ничего не выводит, ошибок тоже не выдаёт Однако
LIME пишет:
ты уверен что их будет 2 а не больше...не может быть ряда с такой же суммой?
[/quote]
Да, возможно и будет выдача с одинаковыми суммами, но это не критично
 
 Top
LIME
Отправлено: 21 Мая, 2013 - 11:41:22
Post Id


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


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE idObj=11
а это выдает?
 
 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