За последние 24 часа нас посетили 18956 программистов и 1616 роботов. Сейчас ищут 1066 программистов ...

Запрос

Тема в разделе "MySQL", создана пользователем neverlose, 1 апр 2011.

  1. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Имеется таблица `table` с полями `id`, `value`, оба integer - `id` - unsigned primary key, autoincrement, `value` - unsingned

    В таблице имеется N записей, с различными значениями `value`

    Задано число M

    Из таблицы нужно выбрать максимальное количество записей но так, чтобы сумма значений поля `value` выбранных записей не превышала M

    Как такое реализовать?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    оу...

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

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    просто подряд выбирать строки пока не дойдем до предела суммы

    именно так
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну хз. я бы брал кусками и в пхп суммировал.
     
  5. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    вариант, но не оптимизированно
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    neverlose
    хе... как скажете, сер =)
     
  7. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Почитай про GROUP BY и HAVING.
     
  8. Shumomer

    Shumomer Активный пользователь

    С нами с:
    12 мар 2011
    Сообщения:
    194
    Симпатии:
    1
    Адрес:
    из вашего вображения
    Эээ.. Местные гуру мускуль не знают?

    [sql]ALTER TABLE `aa` ORDER BY `value`; SET @a=0; SELECT (@a:=@a+`value`) as `sv`,`id`,`value` FROM `aa` WHERE @a<100 HAVING `sv`<100[/sql]

    Выберет максимальное кол-во строк сумма `value` которых меньше 100. Причем запрос оптимизированный (на тестовой базе в 10000 записей - запрос занял 0.0009 сек.).

    ЗЫ А гроуп тут вообще не в кассу.
     
  9. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Тут, может быть, и нет, я не вникал особо, но если разбираться HAVING, то стоит знать и GROUP BY.