2-ой вопрос: есть форма (allnews), на которой выводятся название всех новостей и их кол-во (это одна таблица) и кол-во всех комментариев (2-ая таблица). Для этого делается 2 запроса. После нажатия на новость, открывается полное описание этой новости со всеми комментариями к этой новости. После удаления комментария, необходимо опять загрузить форму allnews и опять происходить 2 запроса для считывания кол-ва новостей и кол-ва комментариев. Тут я задумался, не много ли происходить запросов в БД???? Но по другому я пока не придумал как. Может вы что-нибудь посоветуете?????
Спустя 42 минуты, 30 секунд (4.03.2009 - 13:25) jetistyum написал(а):
1. Update `tablename` SET `field` = `field`+1
WHERE....
2. можно придумать кэширование.. и хранить все данные например в текстовом файле, но не уверен что это вызовет прирост производительности. тем более ИМХО два запроса это нормально. при кэшировании ты не сможешь отобразить самые свежие комментарии (вдруг в эту секунду кто-то добавил свежий комментарий к посту)
WHERE....
2. можно придумать кэширование.. и хранить все данные например в текстовом файле, но не уверен что это вызовет прирост производительности. тем более ИМХО два запроса это нормально. при кэшировании ты не сможешь отобразить самые свежие комментарии (вдруг в эту секунду кто-то добавил свежий комментарий к посту)
Спустя 34 минуты, 8 секунд (4.03.2009 - 13:59) nasferatu написал(а):
спасибо
Спустя 11 минут, 25 секунд (4.03.2009 - 14:10) nasferatu написал(а):
Цитата (jetistyum @ 4.03.2009 - 10:25) |
1. Update `tablename` SET `field` = `field`+1 WHERE.... |
прибавляет нормально. А вычитать не хочет.
Спустя 5 минут, 22 секунды (4.03.2009 - 14:16) sergeiss написал(а):
Код - в студию!
Иначе сложно сказать.
По второму вопросу, я думаю, не надо "париться". Потому что я согласен с предыдущим оратором
, что вряд ли при других вариантах будет прирост в производительности. А вот пробем кучу получишь.
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
По второму вопросу, я думаю, не надо "париться". Потому что я согласен с предыдущим оратором
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 7 минут, 34 секунды (4.03.2009 - 14:23) nasferatu написал(а):
PHP |
elseif ($_POST['delete_comm']) |
Я сделал так, но может как-то можно упростить???
Спустя 47 минут, 9 секунд (4.03.2009 - 15:10) sergeiss написал(а):
Фигасе, уменьшил на единицу...
См. код и комменты внутри него.
См. код и комменты внутри него.
PHP |
elseif ($_POST['delete_comm']) |
PS. И у тебя нету защиты от SQL-инъекции... Ты используешь данные из $_POST['id'] и $_POST['login'] непосредственно в запросе. А это очень плохо.
PPS. И кавычки лишние убери в запросе!!!
Спустя 4 минуты, 53 секунды (4.03.2009 - 15:15) nasferatu написал(а):
SQL-инъекция есть, это я здесь ее просто удалил.
PHP |
$resultdb = mysql_query("UPDATE nameuser SET number_commentary='number_commentary'-1 WHERE login='$login'"); |
у меня заносит в БД -1, несмотря на то, какое значение там стояло.
Спустя 3 минуты, 32 секунды (4.03.2009 - 15:19) sergeiss написал(а):
Вот про это я и написал (правда, потом уже сделал приписку) - "убери лишние кавычки":
PHP |
$resultdb = mysql_query("UPDATE nameuser SET number_commentary=number_commentary-1 WHERE login='$login'"); |
Плюс к этому, я логику не понял... Ты удаляешь что-то, связанное с юзером. И считаешь, что количество этого нечто уменьшилось строго на единицу?
И вообще, у меня впечатление, что у тебя не совсем правильная логика работы с БД...
Зачем принудительно менять количество комментов, связанных с кем-то, если это можно посчитать каждый раз, когда это нужно? И данные будут точными.
Спустя 14 секунд (4.03.2009 - 15:19) jetistyum написал(а):
1. Почитай про MySQL Injection ....
Гуглим...
Не буду тебе давать конкретных решений - они уже даже тут рассматривались стотыщь раз, и если ты сам дойдешь - будет полезнее намного.
и подсчет можно еще выполнять вместо
Гуглим...
Не буду тебе давать конкретных решений - они уже даже тут рассматривались стотыщь раз, и если ты сам дойдешь - будет полезнее намного.
и подсчет можно еще выполнять вместо
PHP |
$resultdb = mysql_query("SELECT * FROM news ORDER BY id DESC"); |
сделать запрос
PHP |
$resultdb = mysql_query("SELECT COUNT(`id`) AS `cnt` FROM news "); |
так уменьшится нагрузка на MySQL сервер, ему не придется каждый раз возвращать все найденные новости... а только цифру - их кол-во.
Спустя 5 минут, 17 секунд (4.03.2009 - 15:24) nasferatu написал(а):
sergeiss
сори, я уже заметил. Все получилось.. Пасиб. А логика с БД может быть, я только совсем недавно начал работать с БД. Вот, потому и задаю вам вопросы
jetistyum, про MySQL Injection уже многое прочитал. Уже один раз исправлял весь свой код. Но, все равно пасиб. Запрос поменяем.
сори, я уже заметил. Все получилось.. Пасиб. А логика с БД может быть, я только совсем недавно начал работать с БД. Вот, потому и задаю вам вопросы
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
jetistyum, про MySQL Injection уже многое прочитал. Уже один раз исправлял весь свой код. Но, все равно пасиб. Запрос поменяем.
Спустя 47 минут, 20 секунд (4.03.2009 - 16:12) nasferatu написал(а):
Вернемся к логике работы с БД.
Кол-во комментариев с юзера я убрал.
В таблице news, где все новости, есть у меня поле coun_comment, где хранится кол-во комментариев к каждой новости. Разумно ли убрать это поле и считать для каждой новости с таблицы comment, где хранятся все комментарии. Ведь получается, что на страницу выводится 5 новостей и для каждой новости выполняется запрос с расчетом комментариев, но зато при внесении комментариев, наобходимо вставить только в одну таблицу. Как тут лучше быть????
Кол-во комментариев с юзера я убрал.
В таблице news, где все новости, есть у меня поле coun_comment, где хранится кол-во комментариев к каждой новости. Разумно ли убрать это поле и считать для каждой новости с таблицы comment, где хранятся все комментарии. Ведь получается, что на страницу выводится 5 новостей и для каждой новости выполняется запрос с расчетом комментариев, но зато при внесении комментариев, наобходимо вставить только в одну таблицу. Как тут лучше быть????
Спустя 24 минуты, 29 секунд (4.03.2009 - 16:36) sergeiss написал(а):
Цитата (nasferatu @ 4.03.2009 - 16:12) |
В таблице news, где все новости, есть у меня поле coun_comment, где хранится кол-во комментариев к каждой новости. Разумно ли убрать это поле и считать для каждой новости с таблицы comment, где хранятся все комментарии. |
Вобщем-то, это лучше всего будет.
Можно даже сделать это в одном запросе, и не мудрить в ПХП.
Типа такого (структура таблиц "абстрактная", но, я думаю, понятная), как я написал ниже. Запрос сложный (хотя и не особо сложный
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
SQL |
select news.news_date, news.news_text, comments.count_comment from news_table news, (select news_id, count(*) as count_comment from comments_table where Условие_для_комментов group by news_id ) as comm where news.news_id=comm.news_id and любое_условие_для_новостей order by news.news_date desc limit 5 |
Работать будет так:
сначала будет подсчитатно количество комментариев для каждой новости, при этом будет использовано ограничение согласно условию_для_комментов. Затем будет составлена таблица из дат новостей, их текста и количества комментов, на основании таблицы новостей и полученного нами запроса с количеством комментов. Для связки таблиц использовано условие news.news_id=comm.news_id. Также будет использовано (если требуется) дополнительное любое_условие_для_новостей.
Полученная таблица с полями news_date, news_text и count_comment будет отсортирована в порядке убывания даты, и будут взяты первые 5 записей...
Реально это будет сделано намного быстрее, чем ты это всё читал
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
И тебе останется только вывести в цикле эти данные.
Спустя 9 минут, 40 секунд (4.03.2009 - 16:46) nasferatu написал(а):
мда, осталось только разобраться с этим запросом.
спасибо
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
спасибо
Спустя 4 минуты, 48 секунд (4.03.2009 - 16:51) sergeiss написал(а):
Разберешься... Это практически то же самое, что и простой запрос.