[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод топ комментариев
serzh
хочу вывести топ комментариев на свой блог!

У меня 8 таблиц!

Вот запрос к одной таблицы (komments_lec):

<?
$result7 = mysql_query("SELECT avka,author,count(*) AS CNT FROM komments_lec GROUP BY author ORDER BY count(*) DESC LIMIT 7",$db);
$myrow7 = mysql_fetch_array($result7);
do
{
$r1 = $myrow7["CNT"];
printf ("<p>%s %s. Комментариев: $r1</p>",$myrow7["avka"],$myrow7["author"]);
}
while ($myrow7 = mysql_fetch_array($result7));
?>

Выводит все в нужном порядке с авкой и автором!!!!

Как мне зделать запрос к 8-ми таблицам???
Или мне надо вытаскивать данные отдельно с каждой таблицы, сумировать их, а потом уже выводить на страницу? Если да, то как это можно сделать (мы выводим не только числа, а й картинку с именем автора. Число додать то без проблем, а как быть с авкой и автором, как это правильно оформить)???



Спустя 1 час, 2 минуты, 22 секунды (21.02.2010 - 22:22) sergeiss написал(а):
Можно UNION использовать.

Спустя 8 минут, 47 секунд (21.02.2010 - 22:30) serzh написал(а):
а поподробнее можно?

Спустя 18 минут, 3 секунды (21.02.2010 - 22:48) sergeiss написал(а):
Во-первых, почитай вот тут http://phpforum.ru/index.php?showtopic=21916 о том, как ПРАВИЛЬНО работать с данными из БД (какой цикл использовать и т.д.)
Во-вторых, про UNION очень хорошо описано здесь.. Или ты думаешь, что пересказывание мануалов "на сон грядущий" - это одно из развлечений на форуме? wink.gif

PS. А тему я перенесу в "PHP+SQL".

Спустя 1 час, 28 минут, 11 секунд (22.02.2010 - 00:17) serzh написал(а):
Оператор UNION помог при выводе данных. Вот измененный код. Вывожу с двух таблиц:

<?
$result5 = mysql_query('(SELECT avka,author,count(*) AS CNT FROM komments_lec GROUP BY author ORDER BY count(*) DESC LIMIT 7)
UNION
(SELECT avka,author,count(*) AS CNT FROM komments_metod GROUP BY author ORDER BY count(*) DESC LIMIT 7)'
);

$myrow5 = mysql_fetch_array($result5);
do
{
printf ("<p>%s %s. Комментариев: %s</p>",$myrow5["avka"],$myrow5["author"],$myrow5["CNT"]);
}
while ($myrow5 = mysql_fetch_array($result5));
?>


Выводит авку, автора и количество сообщений с одной таблицы, а потом сразу же под этим с другой. Как эти данные можно объединить?

Спустя 33 минуты, 52 секунды (22.02.2010 - 00:50) serzh написал(а):
Как мне правильно суммировать выведенный результат?

Спустя 57 минут, 51 секунда (22.02.2010 - 01:48) sergeiss написал(а):
Ты еще не прочитал по моей первой ссылке о том, как правильно выводить данные...

Спустя 54 минуты, 26 секунд (22.02.2010 - 02:43) serzh написал(а):
Да все я прочитал. Там написано, что оператор UNION объединяет выведенную информацию (например есть в одной таблице города, а в другой стадионы и мы с помощью команды UNION можем вывести информацию по городам и стадионам та обьеденить их в одной табличке). Но мне надо просуммировать количество комментариев с разных таблиц, где поле автор совпадает.

Попробовал я еще это сделать вот таким способом:

<?

$result7 = mysql_query("SELECT avka,author,count(*) AS CNT FROM komments_lec GROUP BY author ORDER BY count(*) DESC LIMIT 7",$db);
$myrow7 = mysql_fetch_array($result7);
$result8 = mysql_query("SELECT avka,author,count(*) AS CNT FROM komments_metod GROUP BY author ORDER BY count(*) DESC LIMIT 7",$db);
$myrow8 = mysql_fetch_array($result8);
$i = 1;
do
{
$aut1 = $myrow7["author"];
$aut2 = $myrow8["author"];
$num1 = $myrow7["CNT"];
$num2 = $myrow8["CNT"];
$av1 = $myrow7["avka"];
$av2 = $myrow8["avka"];
$i++;

if ($aut1 = $aut2)
{
$a3 = $num1 + $num2;
}

echo "$av1, $aut1 комментариев: $a3";

}
while ($i < 8);

?>



Но в итоге получил 7 одинаковых выведенных заметок!!!!

Спустя 7 часов, 57 минут, 29 секунд (22.02.2010 - 10:40) sergeiss написал(а):
Говоря про первую ссылку, я имел ввиду, что забудь про цикл do-while (в такой ситуации), и используй цикл while!

Далее.
Тебе нужен "сложный" запрос.
Вложенный - выбирает все нужные данные, с помощью UNION.
Полученная таблица обрабатывается точно также, как обычная. Только в ней уже группируются (в частности, суммируются) нужные элементы. Типа такой структуры я имею ввиду:
select ...., sum(...)
from
(
select ....
union
select
...
)
all_data
group by ....

Спустя 1 день, 23 часа, 27 минут, 50 секунд (24.02.2010 - 10:08) serzh написал(а):

<?
$result = mysql_query("SELECT avka,author,count(*) AS CNT FROM
(SELECT avka,author,count(*) AS CNT FROM komments_lec)
UNION
(SELECT avka,author,count(*) AS CNT FROM komments_metod) all data
GROUP BY author ORDER BY count(*) DESC LIMIT 10"
);


while ($row = mysql_fetch_array($result))
{
echo "Авка : {$row['avka']} <br>" . "Имя : {$row['author']} <br>" . "Комментариев : {$row['CNT']} <br><br>";
}
?>

И все равно ничего не пашет. Ошибка в строке (while ($row = mysql_fetch_array($result))):
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in T:\home\localhost\wenst\index.php on line 143


Знатоки, подскажите что я сделал не так???

Спустя 8 часов, 12 минут, 27 секунд (24.02.2010 - 18:20) serzh написал(а):
при внидрении в код $result=mysql_query(....) or die( mysql_error() );
Мне выдало следующою ошибку: Every derived table must have its own alias!
Что именно у меня в коде не верно??? Вроде все же правильно делаю!!!!


Спустя 6 часов, 23 минуты, 12 секунд (25.02.2010 - 00:44) serzh написал(а):
Подскажите хоть кто нибудь!!!

Спустя 9 часов, 47 минут, 49 секунд (25.02.2010 - 10:31) sergeiss написал(а):
Убери лишние скобки из запроса, да и вообще лишнее убери smile.gif, т.е.
SELECT avka,author,count(*) AS CNT FROM 
(SELECT avka,author,count(*) AS CNT FROM komments_lec)
UNION
(SELECT avka,author,count(*) AS CNT FROM komments_metod) all data
GROUP BY author ORDER BY count(*) DESC LIMIT 10

замени на такой запрос (не проверял, но должен работать)

SELECT * 
FROM
(SELECT avka,author,count(*) AS CNT FROM komments_lec group by author
UNION
SELECT
avka,author,count(*) AS CNT FROM komments_metod group by author) all data
ORDER BY CNT DESC LIMIT 10


Если, конечно, полученный результат соответствует твоим потребностям.

Спустя 15 часов, 32 минуты, 52 секунды (26.02.2010 - 02:04) serzh написал(а):
Проблему решил. Ошибка была в all data, а надо all_data. Вот рабочий код:

<?

$res = "SELECT *, count(*) AS CNT FROM
(SELECT author,avka FROM komments_lec
UNION ALL
SELECT author,avka FROM komments_metod) all_data
group by author order by count(*) desc limit 7"
;

$result7 = mysql_query($res);
while ($row = mysql_fetch_array($result7))

{
echo "Авка : {$row['avka']} <br>" . "Имя : {$row['author']} <br>" . "Комментариев : {$row['CNT']} <br><br>";
}
?>

Спустя 1 день, 14 часов, 51 минута, 44 секунды (27.02.2010 - 16:56) serzh написал(а):
Созрел ещо один ВОПРОС!!!

Вывожу последние заметки на сайте. Как вы уже поняли из нескольких таблиц. Написал запрос:
<?
$rety = "SELECT * FROM
(SELECT date,title,tema FROM dani_metod
UNION
SELECT date,title,tema FROM dani_lec) all_data
ORDER BY date DESC LIMIT 10"
;

$tore = mysql_query($rety);
while ($last = mysql_fetch_array($tore))
{
printf ("<p align='left'><a class ='zametka' href='%s'> %s</a></a></p>",$last ["tema"], $last ["title"]);
}
?>


Но он мне выводит сразу по порядку последние заметки с одной таблицы, а потом последние с другой таблицы, а хотя они должни идти в перемешку!


Спустя 19 часов, 9 минут, 1 секунда (28.02.2010 - 12:05) serzh написал(а):
Можно ли вести поиск с нескольких таблиц. Вот запрос к одной таблице:
$tor = "SELECT * FROM dani_lec WHERE MATCH (title) AGAINST ('$search')"; 
$result = mysql_query($tor);

Все нормально пашет.

А ось запрос к двум таблицам:
$tor = "SELECT * FROM
(SELECT title FROM dani_lec
UNION ALL
SELECT title FROM dani_metod) all_data
WHERE MATCH (title) AGAINST ('
$search')";
$result = mysql_query($tor);



Выдает ошибку: The used table type doesn't support FULLTEXT indexes

Можно ли вопще вести поиск в нескольких таблицах???

Спустя 6 дней, 2 часа, 12 минут, 1 секунда (4.03.2010 - 14:17) serzh написал(а):
ау??????????7
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.