ФорумРазработкаБазы данных → Как выбрать 10 строк: по 2 поля на 5 категорий

Как выбрать 10 строк: по 2 поля на 5 категорий

  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 19 декабря 2008 г. 11:33

    Добрый день.
    Даже не знаю как правильно тему назвать. Надеюсь достаточно осмысленная :)
    Трабла у меня такая:
      есть две таблицы:
      1. id,name - категории
      2. id,cat_id,title,data - новости

    Задача: связкой двух таблиц нужно выбрать по две записи каждой категории (всего их 5). Количество категорий может меняться. В моем случае получается всего 10 записей

    Пока пытался реализовать таким обзаром:
    $query = 'SELECT n.id,n.title,n.data,c.name FROM news AS n, news_cat AS c WHERE n.cat_id=c.id AND n.flag=1 ORDER BY n.data DESC LIMIT 10';

    Но выбираются последние (по дате) 10 записей, удовлетворяющий условиям, то есть, это могут быть, например, 3 новости одной категории, и 7 другой. А остальные категории не попадают сюда :(, что вполне логично. Не знаю как правильно поставить условие для выборки. Думал через ГРУПП, но там получаются только по одной записи на категории (типа уникальные категории).

    Прошу направить в нужном направлении :)
    Заранее благодарен.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 19 декабря 2008 г. 11:43, спустя 9 минут 39 секунд

    тебе бы желательно галочку иметь мол "последняя запись из 2" - поле в таблице статей. тогда это делается просто, если галки нет - делай в 2 запроса, поверь серверу будет проще сделать две выборки по ключам нежели одну ебаную )
    Сапожник без сапог
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 19 декабря 2008 г. 13:21, спустя 1 час 37 минут 42 секунды

    phpdude
    Ну галочку ставить - это возможно (хотя, если честно, все равно не представляю как потом это выбирать), но коли уж Вы говорите, что 2 запроса - это легче, то я так и сделаю. Тем более что и для меня так тоже легче. Просто хотел попробовать "поизвращаться", чтоб понять что да как работает :) Тем более после того, как увидел несколько запросов, предложенные другими юзерами из этого раздела форма, то мне стало интересно что же ещё умеет делать мускул.
    Кстати, тут же вопрос: что быстрее будет работать - запрос на выборку 20 строк (к примеру), с последующим разбором массива (в том числе поиск по массиву) или же делать два запроса? Сама по себе задача: выбрать все записи с field = 10 (любое значение, берется с GET-массива) и field = 0, после чего сделать проверку, есть ли в базе вообще записи с field = 10, и если да, то выдать строки с field = 10, иначе с field = 0 (они точно есть). Насколько знаю, то массивы шустрее обрабатываются, но тут будет практически перебор массива, что не есть гуд.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 19 декабря 2008 г. 13:24, спустя 3 минуты 7 секунд

    1 запрос с посл разбором массива теоретически быстрее.

    задача поставленая в начале темы не реализуема без изъебств на уровне скл запроса. не надо прыгать выше головы :)
    Сапожник без сапог
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 19 декабря 2008 г. 15:12, спустя 1 час 48 минут 27 секунд

    В общем, решил просто по циклу (количество категорий) запустить запросы по выборке 2-ух (или больше, указывается в настройках) статей и записывать результат в файл, после чего просто будет подхват куска страницы с файла. Такое себе кеширование. А обновление файла будет только из админки, при добавлении (изменении) статьи.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 19 декабря 2008 г. 15:19, спустя 7 минут 9 секунд


    В общем, решил просто по циклу (количество категорий) запустить запросы по выборке 2-ух (или больше, указывается в настройках) статей и записывать результат в файл, после чего просто будет подхват куска страницы с файла. Такое себе кеширование. А обновление файла будет только из админки, при добавлении (изменении) статьи.
    тоже вариант конечно :)
    Сапожник без сапог
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 19 декабря 2008 г. 15:33, спустя 13 минут 19 секунд

    просто по циклу (количество категорий) запустить запросы по выборке 2-ух (или больше, указывается в настройках) статей

    Вот это настоящая смерть для сервера, а не джойны. Givi, запросы в цикле использовать нельзя. Вообще. Никак. Никогда.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 19 декабря 2008 г. 15:43, спустя 10 минут 42 секунды


    просто по циклу (количество категорий) запустить запросы по выборке 2-ух (или больше, указывается в настройках) статей

    Вот это настоящая смерть для сервера, а не джойны. Givi, запросы в цикле использовать нельзя. Вообще. Никак. Никогда.
    дочетай! там написано " и сохранить в файл. так сказать кеширование." )) я тоже сначала как и ты хотел выругатся)
    Сапожник без сапог
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 19 декабря 2008 г. 15:52, спустя 8 минут 23 секунды

    Да, сорри, недочитал :)
    Главное, чтобы при кешировании сервер не упал :)))
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 19 декабря 2008 г. 15:52, спустя 28 секунд


    Да, сорри, недочитал :)
    прощен)
    Сапожник без сапог
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 19 декабря 2008 г. 15:53, спустя 50 секунд

    Блин, не успел добавить фразу, ты уже ответил о_О
    Соответствуешь статусу! :)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 19 декабря 2008 г. 15:57, спустя 4 минуты 15 секунд

    стараюсь)
    Сапожник без сапог
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 19 декабря 2008 г. 16:24, спустя 26 минут 48 секунд

    sap
    Ну сервер не умрет, так как в любом случае количество категорий будет не более 20 (это максимальный максимум :P). А насчет запросов в цикле - знаю, что нельзя вообще такое делать. Но, на данный момент решил сделать по кратчайшему пути. Тем более что и обновление статьей на первых порах будет не очень частое. Хотя хотелось бы все оптимизировать, но видать буду делать это уже с запущенным сайтом. А оптимизировать там будет чего :D

Пожалуйста, авторизуйтесь, чтобы написать комментарий!