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

Запрос №2

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

  1. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Имеется таблица `id`, `val`. Оба поля integer. `id` - unsigned primary auto_increment, `val` - unsigned

    В таблице имеется N записей.

    Задаётся число M

    Необходимо выбрать из таблицы максимальное количество записей таким образом, чтобы количество значний `val` не превосходило M.

    (в Запросе №1 говорилось о сумме, здесь уже идёт речь конкретно о значениях, словно у вас имеется таблица юзеров и разных стран, и вым нужно выбрать юзеров из M стран (не важно каких, известно только количество). Делать по id IN() не советуйте, число M может быть и > 1000 и писать всё в IN() - плохо)
     
  2. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Чо то не догнал.
    Если говорить про юзеров из M стран, то:
    [sql]select name from users as u join
    (select distinct country from users limit 0, M) -- можно order by RAND() заюзать для случайных стран
    as c on c.country=u.country[/sql]
     
  3. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    В этом случае IN(список id-шек) сработает быстрее JOIN'а.
    Но передавать 1000 id-шек в IN() не мудрено