[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: И опять сложная выборка из БД
m4a1fox
Прошу на меня не серчать... Просто учусь еще делать сложные выборки и разные вариации с ними... Вот не могу придумать логику как вот этот запрос
<?
$query_author = mysql_query("SELECT DISTINCT `author`
FROM `you_mail`
"
) or die ("Ошибка -".mysql_error());
while($ind_author=mysql_fetch_assoc($query_author))
{
$count_author = mysql_query("SELECT `id`
FROM `you_mail`
WHERE `author`='"
.$ind_author['author']."'
AND `hide` = 'show'
"
) or die ("Ошибка - ".mysql_error());
$cnt_author = mysql_num_rows($count_author);
echo '
<a href="author.php?author='
.$ind_author['author'].'">
'
.$ind_author['author'].' ('.$cnt_author.')</a>
'
;
}
?>


Уместить в один. Если кто знает, подскажите... Спасибо.



Спустя 17 минут, 29 секунд (23.03.2011 - 18:47) Renden написал(а):
m4a1fox
Эм..а мне просто интересно, а зачем ты DISTINCT используешь в чем смыл?)
И мне не понятно в 1 запросе ты выбираешь Автора, во втором выбираешь его id.. Чет я немогу понять что ты хочешь получить данными запросами.

Спустя 14 минут, 24 секунды (23.03.2011 - 19:01) m4a1fox написал(а):
Renden
Объясняю. Выбираю авторов, дабы они не повторялись в запросе №1. а во втором считаю их статьи и вывожу их (статей) кол-во.

Спустя 8 минут, 40 секунд (23.03.2011 - 19:10) sergeiss написал(а):
Так я не понял... Ты про JOIN что-нибудь читал или нет?

Спустя 1 минута, 57 секунд (23.03.2011 - 19:12) m4a1fox написал(а):
sergeiss
Да. Читал. И у меня вопрос. JOIN LEFT используется для для присоединения с другой таблицей. Можно ли делать его с той же таблицей, что и первая?

Спустя 4 минуты, 22 секунды (23.03.2011 - 19:16) m4a1fox написал(а):
Вот что понаписовал
<?
$query_author = mysql_query("SELECT DISTINCT a.`author`,
COUNT(a.`id`) AS `id_you_mail`
FROM `you_mail` a
LEFT JOIN `you_mail` b
WHERE a.`author` = b.`author`
GROUP BY a.`id`
"
) or die ("Ошибка -".mysql_error());
while($ind_author=mysql_fetch_assoc($query_author))
{

echo '
<a href="author.php?author='
.$ind_author['author'].'">
'
.$ind_author['author'].' ('.$ind_author['id_you_mail'].')</a>
'
;
}
?>

Спустя 19 минут, 16 секунд (23.03.2011 - 19:35) sergeiss написал(а):
Таблица "сама с собой" сджойненная - это возможно :) Но не с таким условием!!!
ON a.`author` = b.`author`

Ты получишь очень много комбинаций строк, на которые вряд ли расчитывал.

Спустя 57 секунд (23.03.2011 - 19:36) m4a1fox написал(а):
sergeiss
Значит, лучше оставить как есть? То есть как в самом первом посте этой темы?

Спустя 2 минуты, 26 секунд (23.03.2011 - 19:39) sergeiss написал(а):
Цитата (m4a1fox @ 23.03.2011 - 20:36)
Значит, лучше оставить как есть? То есть как в самом первом посте этой темы?

Лучше сделать одним запросом. Только не так, как ты написал тут "последний" код.

Спустя 2 минуты, 44 секунды (23.03.2011 - 19:41) m4a1fox написал(а):
sergeiss
Тогда, как мне подсчитать, кол-во статей автора, после того как я выбрал его по методу DISTINCT. Вот еще вариант кода, но он не работает :(
$query_author = mysql_query("SELECT DISTINCT a.`author`,
COUNT(b.`id`) AS `id_you_mail`
FROM `you_mail` a
LEFT JOIN `you_mail` b
ON a.`author` = b.`author`
WHERE a.`author` = b.`id`
GROUP BY a.`id`
"
) or die ("Ошибка -".mysql_error());
while($ind_author=mysql_fetch_assoc($query_author))
{

echo '
<a href="author.php?author='
.$ind_author['author'].'">
'
.$ind_author['author'].' ('.$ind_author['id_you_mail'].')</a>
'
;
}

Спустя 4 минуты, 53 секунды (23.03.2011 - 19:46) m4a1fox написал(а):
Ага. Разобрался. Надо было без WHERE. Спасибо.

Спустя 2 минуты, 47 секунд (23.03.2011 - 19:49) sergeiss написал(а):
m4a1fox - если мы говорим о запросе, то зачем ты приводишь окружающий его ПХП код?

Цитата (m4a1fox @ 23.03.2011 - 20:01)
Выбираю авторов, дабы они не повторялись в запросе №1. а во втором считаю их статьи и вывожу их (статей) кол-во.


ОК, думаем... А зачем тебе 2 запроса? Вот так где-то, наверное, одним запросом:
SELECT `author`, count(`id`) as `count_id`
from `your_mail`
group by `author`

Спустя 27 минут, 52 секунды (23.03.2011 - 20:17) m4a1fox написал(а):
sergeiss
У меня вопрос. Вы не применили DISTINCT. Он тут не нужен?
Наверно нет. Так как тут есть GROUP BY `author`. Так?

Спустя 15 минут, 44 секунды (23.03.2011 - 20:33) sergeiss написал(а):
Да, в данном случае не нужен. И вообще :) Ты попробуй тот запрос и другой

select distinct `author` from `your_mail`

Количество записей должно быть одинаковое. И список авторов тоже должен получиться одинаковый. Но в предыдущем запросе будет еще и количество записей, связанных с каждым автором.
Быстрый ответ:

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