вопрос по оптимизации СуБД

Тема в разделе "Базы данных", создана пользователем CrashX, 8 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    есть таблицы которые во вложении.
    помогите составить 2 запроса.
    1.нужно вывести из каждой категории вывести по 5 новостей с указанием количества комментариев, и их авторов
    2.потом для одной новости имея только id новости вывести новость, узнать категорию и 10 последних коментариями к ней, а так же их авторов


    и теперь вопрос будет ли целесобрано создать еще одну таблицу прав доступа к разделу она приблизительно будет следующего вида
    id - ключ, автоинктемент
    gid - группа пользователей (группы прописаны статически)
    task - тип действия (edit\read\save\del\null и тп)
     

    Вложения:

    • news.jpg
      news.jpg
      Размер файла:
      51,8 КБ
      Просмотров:
      33
  2. nuke333

    nuke333 Создатель

    Регистр.:
    8 дек 2008
    Сообщения:
    47
    Симпатии:
    12
    а каким боком задачи из 1. и 2. связаны с таблицей прав для групп? Если редактировать права через web-интерфейс нужно - имеет смысл создавать, если для "статических" групп права тоже "статические", то смысла в дополнительных обращениях в базу нет
     
  3. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    я пока просил помоши в составлении запросов,
    а второе пока никак не всязано, тк у меня групп пользователей может быть неограничено ни чем, и у каждой из них есть права на доступ к операциям. механизм доступа уже отработан. было бы целесобзано в кажом модуле создавать таблицу с правами или вынести все это в отдельную таблицу
     
  4. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    К вопросу #2
    имея только id новости (например 4) вывести новость
    PHP:
    $newsId 4;
    $query mysql_query("SELECT * FROM errors WHERE id = ".$newsId);
    $newsContent mysql_fetch_assoc($query);
    foreach(
    $newsContent as $key => $value)
        echo 
    $key." - ".$value."<br />";
    узнать категорию можно будет из $newsContent['cid'].
    Последние 10 комментариев можно выбрать запросом
    PHP:
    $query=mysql_query("SELECT
    comm.*,
    usr.usurname AS 'authorName'
    FROM news_comment AS comm
    LEFT JOIN users AS usr
    ON usr.id = comm.author
    WHERE comm.nid = "
    .$newsId."
    ORDER BY comm.id DESC LIMIT 0,10"
    );
    Делать это в одном запросе наверное не стОит, т.к.значительно увеличится результат, возвращаемый mySQL.

    UPD
    По первому вопросу как-то до конца вкурить не могу. Вот получение последних 5 новостей, авторов новостей и количества коментариев, НО по заданой категории.
    Код:
    SELECT news.*,
    usr.usurname AS 'authorName',
    (SELECT count(nid) FROM news_comment WHERE nid = news.id) as 'replies'
    FROM news
    LEFT OUTER JOIN users AS usr
    ON usr.id = news.author
    WHERE news.cid = 1
    ORDER BY news.id DESC LIMIT 0, 5
    
    Как сделать выборку и категорий и пяти последних новостей одним запросом не знаю. и этот код как подзапрос использовать наверное тоже не выйдет, "WHERE news.cid =" на сможет получить параметр из внешнего запроса.
     
Статус темы:
Закрыта.