- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
есть подборка статей. В индексном файле выглядит так:
Заголовок статьи со ссылкой на статью
ссылка на комментарии
Заголовок статьи со ссылкой на статью
ссылка на комментарии
Заголовок статьи со ссылкой на статью
ссылка на комментарии
...
То есть, вроде обычного блога.
Проблема в том, что нужно вывести количество комментариев к каждой статье, но не хочется делать sql-запрос на определение количества после каждого заголовка. На данный момент, я представляю себе такой механизм:
<?php
$sql ='SELECT * FROM статьи';
$result=mysql_query($sql);
while ($sql_ar=mysql_fetch_assoc($result)) {
}
mysql_free_result($result);
?>
Подозреваю, что есть способы попроще, чем делать новый запрос после считывания очередной строки массива, полученного основным запросом. Буду очень признателен. если кто-то подскажет, как уменьшить количество запросов к базе.
Supervisork что-то типа этого ?
SELECT А.id_статьи, А.заголовок, и тд..., count(Б.id_коментария)
FROM статьи А, коментарии Б
WHERE А.id_статьи = Б.id_статьи
только тут нужен GROUP BY:
SELECT А.id_статьи, А.заголовок, и тд..., count(Б.id_коментария)
FROM статьи А, коментарии Б
WHERE А.id_статьи = Б.id_статьи
GROUP BY A.id_статьи
Для MySQL будет проще и быстрее сделать отдельный запрос на подсчет кол-ва комментариев для каждой записи.
А еще лучше в таблице статей хранить в отдельном поле кол-во комментариев и изменять его при удалении/добавлении комментария.
alexandr_nv и netwind, ваша идея вроде ясна, но если делать так, как предлогаете вы, нужно:
SELECT А.id_статьи AS id_st, А.заголовок AS z_st, и тд..., count(Б.id_коментария)...
тогда полученные данные нужно выгребать из массива $sql_ar как, например:
$sql_ar['id_st']
как получать значения count
(его тоже как AS делать?).
Не то, чтобы я совсем темный, но не хватает опыта.
-K- хранить количество комментов - идея по-своему хорошая. Но есть и недостатки. Я юзаю таблици миисам, а они не поддерживают транзакции. В результате количество, занесенное в поле может не соответствовать реальному.
Но быстродействие, конечно, подскакивает до предела.
И так, я все таки надеюсь получить исчерпывающий ответ о том, как это сделать без записи количества. Как получать значения count?
SELECT a.*, COUNT(c.CommentID) FROM Articles a
JOIN Comments c ON a.ArticleID=c.ArticleID
GROUP BY a.*
Можете создать представление (вьюху)
CREATE VIEW viewArticles AS
тут запрос
а запрос будет выглядеть уже так: select * from viewArticles
Для более высокой производительности можно написать триггер, который будет делать инкремент (декремент) на поле счетчика. Но тут Вам на пальцах не объяснишь.
shareyourtrade.com, а как сделать, чтобы не на пальцах?
http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html
Всегда можно почитать в мануале :)
за мануал спасибо. Но я слаб в английском, так что, похоже. не смогу им воспользоваться. :(
Вот, если бы вы указали. какая часть текста в данном мануале соответствует моему случаю, то с помошью словаря и научного тыка, наверно, разобрался бы.
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;
Но играться с триггерами, плохо зная SQL - это минное поле
В примере разбирается - что перед вставкой в первую таблицу сделать три запроса.
триггеры в MySQL могут создаваться только пользователем с привилегией SUPER, т.е. если Ваше приложение использует триггеры, то ни на одном, даже платном, хостинге оно работать не будет :(
События к которым можно привязывать триггеры в MySQL: INSERT, UPDATE, DELETE а мне-то нужен селект :(