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
Форумы портала PHP.SU » » Вопросы новичков » выбор данных из MySQL

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

1. Saymor - 14 Мая, 2013 - 20:26:08 - перейти к сообщению
Имеется 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.  
2. LIME - 14 Мая, 2013 - 20:32:07 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM tbl HAVING price=MIN(price) OR price=MAX(price)
нужно учесть что дынных рядов может быть более чем по 1 шт на min и max
3. Saymor - 15 Мая, 2013 - 21:31:38 - перейти к сообщению
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


только такой запрос не работает
4. LifePlay - 16 Мая, 2013 - 09:25:27 - перейти к сообщению
Структуру таблицы покажите. Что-то не понятно.
5. Saymor - 16 Мая, 2013 - 09:36:13 - перейти к сообщению
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 |


так лучше?
6. imya - 16 Мая, 2013 - 09:43:54 - перейти к сообщению
А вы читали применимость HAVING?

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


Сгруппируйте по суммам, должно работать.
7. Saymor - 16 Мая, 2013 - 11:51:29 - перейти к сообщению
imya пишет:
Сгруппируйте по суммам, должно работать.

не получается у меня, как правильно запрос сформировать?
8. imya - 16 Мая, 2013 - 12:44:28 - перейти к сообщению
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
9. imya - 17 Мая, 2013 - 11:46:50 - перейти к сообщению
Так мы и не узнаем, сработало или нет Растерялся
10. Saymor - 17 Мая, 2013 - 19:25:14 - перейти к сообщению
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. )
11. imya - 20 Мая, 2013 - 11:15:17 - перейти к сообщению
Не вижу проблемы)

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)
12. Saymor - 20 Мая, 2013 - 15:26:46 - перейти к сообщению
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"
13. LIME - 20 Мая, 2013 - 15:34:42 - перейти к сообщению
Не понял еще варианты есть?
HAVING работает только с агрегирующими ф-циями
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE idObj=11 HAVING  summa=MIN(summa) OR summa=MAX(summa)

(Добавление)
Saymor пишет:
в результате должно быть выведено 2 строки
ты уверен что их будет 2 а не больше...не может быть ряда с такой же суммой?
14. Saymor - 20 Мая, 2013 - 19:09:06 - перейти к сообщению
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]
Да, возможно и будет выдача с одинаковыми суммами, но это не критично
15. LIME - 21 Мая, 2013 - 11:41:22 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE idObj=11
а это выдает?

 

Powered by ExBB FM 1.0 RC1