Создать ответ 
Поиск на сайте по комментариям из БД
Автор Сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #1
Поиск на сайте по комментариям из БД
Перенес продолжение обсуждения из темы Форма добавления комментариев к темам

Юрий пишет:
Цитата:Если вас не затруднит, напишите пожалуйста подробнее, обрыл весь интернет, ничего не нашел. Вот что получилось:

<form action="" method="post" id="content">
<div class="form-item">
<input type="text" name="" value="" maxlength="128" placeholder="Найти...">
</div>
<?php $result = mysql_query("SELECT * FROM comment WHERE message LIKE '%".$search_text."%'", $link);
?>
<div class="form-actions">
<input type="submit" name="op" value="Поиск" class="form-submit">
</div>
</form>

Попробуйте так:
Цитата:<?php
if (isset($_POST[search_text])) {
$search_text=htmlspecialchars(mysql_real_escape_string($_POST[search_text]));
$result = mysql_query("SELECT * FROM comment WHERE message LIKE '%".$search_text."%'", $link);
$number = mysql_num_rows($result);
for ($n=1; $n<=$number; $n++) {
$comments=mysql_fetch_array($result);

$result_minus = mysql_query("SELECT sum(ocenka=1), sum(ocenka=0) FROM ocenka_comment WHERE comment_id='".$comments[id]."' LIMIT 1", $link);
$ocenka_com=mysql_fetch_array($result_minus);

echo '<br><table border="0" width="100%" style="border: 1px solid #4874a3;"><tr>';
echo '<td align="left">';
echo '<div id="m'.$comments[id].'"></div><b>'.$comments[login].'</b></td>';
echo '<td width="140">';
echo '<span style="font-size:12px;">('.$comments[date].')</span></td>';
echo '<td width="20">';
echo '<form method="POST" action="'.$_SESSION[mess_url].'#m'.$comments[id].'">';
echo '<input type="hidden" name="comment_id" value="'.$comments[id].'">';
echo '<input type="hidden" name="ocenka" value="1">';
echo '<input type="image" src="image/up.png" title="Хороший комментарий">';
echo '</form></td>';
echo '<td width="5"><b>'.($ocenka_com[0]-$ocenka_com[1]).'</b></td>';
echo '<td width="20">';
echo '<form method="POST" action="'.$_SESSION[mess_url].'#m'.$comments[id].'">';
echo '<input type="hidden" name="comment_id" value="'.$comments[id].'">';
echo '<input type="hidden" name="ocenka" value="0">';
echo '<input type="image" src="image/down.png" title="Плохой комментарий">';
echo '</form></td></tr></table>';
echo '<table border="0" width="100%" style="border: 1px solid #eeeeee;" bgcolor="#eeeeee">';
echo '<tr><td colspan="5" align="justify">';
echo wordwrap(nl2br($comments[message]), 70, "\n", 1);
echo '</td></tr></table>';
}
}
?>

<form action="" method="post" id="content">
<div class="form-item">
<input type="text" name="search_text" value="" maxlength="128" placeholder="Найти...">
</div>

<div class="form-actions">
<input type="submit" name="op" value="Поиск" class="form-submit">
</div>
</form>

Дальше думаю сами доделаете как надо. Wink
14.11.2012 22:51:20
Найти все сообщения Цитировать это сообщение
artindustrial Не на форуме
Младший сержант
*

Сообщений: 21
У нас с: Nov 2012
Сообщение: #2
RE: Поиск на сайте по комментариям из БД
Огромное спасибо. И не подскажите ещё, как отсортировать - последние 50 комментариев, популярные (по лайкам), и комментарий недели месяца и года (тоже по лайкам).
Smile
15.11.2012 00:26:42
Найти все сообщения Цитировать это сообщение
artindustrial Не на форуме
Младший сержант
*

Сообщений: 21
У нас с: Nov 2012
Сообщение: #3
RE: Поиск на сайте по комментариям из БД
(14.11.2012 22:51:20)Admin писал(а):  Попробуйте так:
Цитата:<?php
if (isset($_POST[search_text])) {
$search_text=htmlspecialchars(mysql_real_escape_string($_POST[search_text]));
$result = mysql_query("SELECT * FROM comment WHERE message LIKE '%".$search_text."%'", $link);
$number = mysql_num_rows($result);
for ($n=1; $n<=$number; $n++) {
$comments=mysql_fetch_array($result);

$result_minus = mysql_query("SELECT sum(ocenka=1), sum(ocenka=0) FROM ocenka_comment WHERE comment_id='".$comments[id]."' LIMIT 1", $link);
$ocenka_com=mysql_fetch_array($result_minus);

echo '<br><table border="0" width="100%" style="border: 1px solid #4874a3;"><tr>';
echo '<td align="left">';
echo '<div id="m'.$comments[id].'"></div><b>'.$comments[login].'</b></td>';
echo '<td width="140">';
echo '<span style="font-size:12px;">('.$comments[date].')</span></td>';
echo '<td width="20">';
echo '<form method="POST" action="'.$_SESSION[mess_url].'#m'.$comments[id].'">';
echo '<input type="hidden" name="comment_id" value="'.$comments[id].'">';
echo '<input type="hidden" name="ocenka" value="1">';
echo '<input type="image" src="image/up.png" title="Хороший комментарий">';
echo '</form></td>';
echo '<td width="5"><b>'.($ocenka_com[0]-$ocenka_com[1]).'</b></td>';
echo '<td width="20">';
echo '<form method="POST" action="'.$_SESSION[mess_url].'#m'.$comments[id].'">';
echo '<input type="hidden" name="comment_id" value="'.$comments[id].'">';
echo '<input type="hidden" name="ocenka" value="0">';
echo '<input type="image" src="image/down.png" title="Плохой комментарий">';
echo '</form></td></tr></table>';
echo '<table border="0" width="100%" style="border: 1px solid #eeeeee;" bgcolor="#eeeeee">';
echo '<tr><td colspan="5" align="justify">';
echo wordwrap(nl2br($comments[message]), 70, "\n", 1);
echo '</td></tr></table>';
}
}
?>

<form action="" method="post" id="content">
<div class="form-item">
<input type="text" name="search_text" value="" maxlength="128" placeholder="Найти...">
</div>

<div class="form-actions">
<input type="submit" name="op" value="Поиск" class="form-submit">
</div>
</form>

Дальше думаю сами доделаете как надо. Wink



Пожалуйста, напишите форму для отображения 40 новых коментов, самые популярные по оценкам, комент, недели, месяца и года тоже по оценкам. Заранее вам спасибо.
15.11.2012 09:14:38
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #4
RE: Поиск на сайте по комментариям из БД
Это все делается простыми SQL запросами.

Например, чтобы получить последние 50 комментариев, достаточно заменить строчку
Код:
$result = mysql_query("SELECT * FROM comment WHERE message LIKE '%".$search_text."%'", $link);


на
Код:
$result = mysql_query("SELECT * FROM comment ORDER BY date desc LIMIT 50", $link);

С оценками чуть сложнее. Там придется больше менять.

Вот, например, так будут выглядеть SQL запросы для лучших 30 комментариев:

Код:
if (isset($_POST[search_text])) {
$search_text=htmlspecialchars(mysql_real_escape_string($_POST[search_text]));
$result_ocenki = mysql_query("SELECT comment_id FROM ocenka_comment GROUP BY comment_id ORDER BY sum(ocenka=1)-sum(ocenka=0) desc LIMIT 30", $link);
$number = mysql_num_rows($result_ocenki);
for ($n=1; $n<=$number; $n++) {
$id_comm=mysql_fetch_array($result_ocenki);
$result = mysql_query("SELECT * FROM comment WHERE id='".$id_comm[comment_id]."'", $link);
$comments=mysql_fetch_array($result);

$result_minus = mysql_query("SELECT sum(ocenka=1), sum(ocenka=0) FROM ocenka_comment WHERE comment_id='".$comments[id]."' LIMIT 1", $link);
$ocenka_com=mysql_fetch_array($result_minus);

echo '<br><table border="0" width="100%" style="border: 1px solid #4874a3;"><tr>';

. . .


Для того чтобы учитывать оценки только за последний месяц, добавьте в SQL следующее условие: WHERE date<CURDATE()-INTERVAL 1 MONTH
15.11.2012 19:57:10
Найти все сообщения Цитировать это сообщение
artindustrial Не на форуме
Младший сержант
*

Сообщений: 21
У нас с: Nov 2012
Сообщение: #5
RE: Поиск на сайте по комментариям из БД
(15.11.2012 19:57:10)Admin писал(а):  Это все делается простыми SQL запросами.

Например, чтобы получить последние 50 комментариев, достаточно заменить строчку
Код:
$result = mysql_query("SELECT * FROM comment WHERE message LIKE '%".$search_text."%'", $link);


на
Код:
$result = mysql_query("SELECT * FROM comment ORDER BY date desc LIMIT 50", $link);

С оценками чуть сложнее. Там придется больше менять.

Вот, например, так будут выглядеть SQL запросы для лучших 30 комментариев:

Код:
if (isset($_POST[search_text])) {
$search_text=htmlspecialchars(mysql_real_escape_string($_POST[search_text]));
$result_ocenki = mysql_query("SELECT comment_id FROM ocenka_comment GROUP BY comment_id ORDER BY sum(ocenka=1)-sum(ocenka=0) desc LIMIT 30", $link);
$number = mysql_num_rows($result_ocenki);
for ($n=1; $n<=$number; $n++) {
$id_comm=mysql_fetch_array($result_ocenki);
$result = mysql_query("SELECT * FROM comment WHERE id='".$id_comm[comment_id]."'", $link);
$comments=mysql_fetch_array($result);

$result_minus = mysql_query("SELECT sum(ocenka=1), sum(ocenka=0) FROM ocenka_comment WHERE comment_id='".$comments[id]."' LIMIT 1", $link);
$ocenka_com=mysql_fetch_array($result_minus);

echo '<br><table border="0" width="100%" style="border: 1px solid #4874a3;"><tr>';

. . .


Для того чтобы учитывать оценки только за последний месяц, добавьте в SQL следующее условие: WHERE date<CURDATE()-INTERVAL 1 MONTH


Не могу понять почему, но не выводит данные по выборке оценок.
(Последний раз сообщение было отредактировано 16.11.2012 в 21:26:37, отредактировал пользователь artindustrial.)
16.11.2012 21:21:36
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #6
RE: Поиск на сайте по комментариям из БД
Попробуйте добавить условие WHERE UNIX_TIMESTAMP(date)<CURDATE()-INTERVAL 1 MONTH

Сразу не посмотрел, что дату мы храним не в формате UNIX, поэтому нам потребуется ее преобразование при помощи UNIX_TIMESTAMP().
17.11.2012 20:50:05
Найти все сообщения Цитировать это сообщение
artindustrial Не на форуме
Младший сержант
*

Сообщений: 21
У нас с: Nov 2012
Сообщение: #7
RE: Поиск на сайте по комментариям из БД
(17.11.2012 20:50:05)Admin писал(а):  Попробуйте добавить условие WHERE UNIX_TIMESTAMP(date)<CURDATE()-INTERVAL 1 MONTH

Сразу не посмотрел, что дату мы храним не в формате UNIX, поэтому нам потребуется ее преобразование при помощи UNIX_TIMESTAMP().

Тут дело в том что весь запрос вывода комментариев по оценкам не работает Smile он ничего не выводит, помогите пожалуйста.
(Последний раз сообщение было отредактировано 17.11.2012 в 22:12:14, отредактировал пользователь artindustrial.)
17.11.2012 21:43:02
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #8
RE: Поиск на сайте по комментариям из БД
Так как код писал не проверяя (лень было базу создавать для проверки), то естественно допустил ошибку (знак < нужно было заменить на знак >).

Вот целый код, который у меня работает. Данный код выводит 30 лучших комментариев по оценкам за последний месяц.
Код:
$result_ocenki = mysql_query("SELECT sum(ocenka=1),sum(ocenka=0),comment_id FROM ocenka_comment WHERE (date>CURDATE()-INTERVAL 1 MONTH) GROUP BY comment_id ORDER BY sum(ocenka=1)-sum(ocenka=0) desc LIMIT 30", $link);
$number = mysql_num_rows($result_ocenki);
for ($n=1; $n<=$number; $n++) {
$id_comm=mysql_fetch_array($result_ocenki);
$result = mysql_query("SELECT * FROM comment WHERE id='".$id_comm[comment_id]."'", $link);
$comments=mysql_fetch_array($result);

echo '<br><table border="0" width="100%" style="border: 1px solid #4874a3;"><tr>';
echo '<td align="left">';
echo '<div id="m'.$comments[id].'"></div><b>'.$comments[login].'</b></td>';
echo '<td width="140">';
echo '<span style="font-size:12px;">('.$comments[date].')</span></td>';
echo '<td width="20">';
echo '<form method="POST" action="'.$_SESSION[mess_url].'#m'.$comments[id].'">';
echo '<input type="hidden" name="comment_id" value="'.$comments[id].'">';
echo '<input type="hidden" name="ocenka" value="1">';
echo '<input type="image" src="image/up.png" title="Хороший комментарий">';
echo '</form></td>';
echo '<td width="5"><b>'.($id_comm[0]-$id_comm[1]).'</b></td>';
echo '<td width="20">';
echo '<form method="POST" action="'.$_SESSION[mess_url].'#m'.$comments[id].'">';
echo '<input type="hidden" name="comment_id" value="'.$comments[id].'">';
echo '<input type="hidden" name="ocenka" value="0">';
echo '<input type="image" src="image/down.png" title="Плохой комментарий">';
echo '</form></td></tr></table>';
echo '<table border="0" width="100%" style="border: 1px solid #eeeeee;" bgcolor="#eeeeee">';
echo '<tr><td colspan="5" align="justify">';
echo wordwrap(nl2br($comments[message]), 70, "\n", 1);
echo '</td></tr></table>';
}
17.11.2012 22:37:49
Найти все сообщения Цитировать это сообщение
artindustrial Не на форуме
Младший сержант
*

Сообщений: 21
У нас с: Nov 2012
Сообщение: #9
RE: Поиск на сайте по комментариям из БД
Спасибо огромное за помощь, форма работает, но выводит все комментарии, только те которые не имеют оценки - не написано ни даты ни автора то что и надо в принципе, но стоит два ноля вместо даты ноль и где место оценки стоит ноль, можно ли сделать выборку, что бы остальные вообще не отображались.
18.11.2012 20:55:14
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #10
RE: Поиск на сайте по комментариям из БД
Перечитал несколько раз Ваше сообщение, но так ничего и не понял. Unknown

Я же привел Вам совершенно рабочий код, который выводит 30 лучших комментариев по оценкам за последний месяц. Данный код показывает и даты и оценки и имя автора.

Насколько я понимаю, у Вас все имена таблиц и полей отличаются, из-за этого и все проблемы.
18.11.2012 21:13:30
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru