За последние 24 часа нас посетили 18013 программистов и 1645 роботов. Сейчас ищут 1980 программистов ...

Оптимальный запрос

Тема в разделе "PHP и базы данных", создана пользователем ShamahN, 17 дек 2008.

  1. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    В общем ситуация какая: есть статьи, на них можно оставлять комментарии. И в превью статьи хочется выводить:

    12.12.2008 Мегановость
    Свершилось чудо... Тра-та-та, Тра-та-та...
    Читать полностью/Обсудить...

    Комментариев оставлено (10) Участников (3)


    Структура таблиц, думаю тривиальна

    news (id, content) - таблица с новостями
    comments (id, id_news, id_master, author(varchar), data, comment)

    В конечном итоге, мне нужна одна строка, верно?
    Дата, Тема, Предновость, К-во уч-ков, к-во уников.

    Как написать такой запросик. помогите :)
     
  2. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    добавь к таблице news поля comments_count и users_count
     
  3. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Sergey89, я думал об этом. Но это надо будет не забывать о целостности при добавлении комментов и модерировании... В принципе, ничего сложного, но будет оптимальнее в плане запросов.
    Да.. все таки так будет правильнее. Наверное, мне надо было это услышать..
    Спс
     
  4. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Может тригер какой-нить написать :):)
     
  5. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Я делал себе поля cuunt_* и потом триггер на инсерт в комменты и на удаление

    В нескольких местах такой подход реализован
     
  6. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Вльдемар, проблема только что тригеры я как-то мелкомягкий скул писал, да уже и не помню как это было...
    Можешь выложишь что у тебя получалось?
     
  7. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    думаю хостер врядли обрадуется если я начну что-нить писать в эту БД что-нить?
     
  8. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    [sql]CREATE TRIGGER count_it AFTER INSERT
    ON comments FOR EACH ROW
    BEGIN

    IF (SELECT count(*) from comments where master_id = NEW.master_id and news_id=NEW.id) > 0
    UPDATE news
    SET count_field = count_field+1
    SET count_unic_field = count_unic_field+1
    WHERE id = NEW.id_news
    ELSE
    UPDATE news
    SET count_field = count_field+1
    WHERE id = NEW.id_news
    END IF;

    END;[/sql]

    Что-то вроде этого. Если MySQL не поддерживает if внутри update, что скорее всего. Если поддерживает, то


    [sql] UPDATE news
    SET count_field = count_field+1
    IF (SELECT count(*) from comments where master_id = NEW.master_id and news_id=NEW.id) > 0
    SET count_unic_field = count_unic_field+1
    END IF
    WHERE id = NEW.id_news;
    [/sql]
     
  9. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Кто ж мне даст доступ к mysql базе данных :)