[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите скрыть пустую категорию,
MrBrown
Здравствуйте! В меню несколько разделов, в них категории, в некоторых категориях пока вообще нет статей.
Таблица разделов parts: id | part
Таблица категорий cats: id | id_part | cat
Таблица статей data: id | id_cat | text
Мой код вывода разделов и категорий в цикле (показываются все категории, пустые в том числе):
<?php
echo '<p class=\'nav_title\'>';//форматирование
echo '<strong>'.$myrow2['part'].'<br></strong>'; //Раздел (цикл запроса разделов не показан)
echo'</p>';//форматирование
$n = $myrow2['id'];//переменная = id таблицы разделов (хотя можно было и без неё)
$result3 = mysql_query('SELECT * FROM cats WHERE id_part = \''.$n.'\';');//запрос категорий в соответствующем разделе
while($myrow3 = mysql_fetch_assoc($result3))//цикл показа категорий
{
echo '<p>';//форматирование
echo '<a href=\'view_cats.php?id='.$myrow3['id'].'\'>'.$myrow3['cat'].'</a><br></strong>';//категории
echo '</p>'; //форматирование
}
?>


Подскажите, где поставить условие: "если в таблице `data` нет ни одной записи с id_cat, соответствующей очередной категории, выводимой в цикле, то данную категорию не выводить в меню". И как написать нужный запрос из базы `data` и это условие:
if (empty ($myrow['id_cat']))
или
if (($myrow['id_cat'])="")
или как-то ещё?
Спасибо.
p.s. а, может быть, можно условие вывода поставить прямо в запросе?



Спустя 25 минут, 2 секунды (26.06.2012 - 11:02) alexbel2404 написал(а):
<?php
echo '<p class=\'nav_title\'>';//форматирование
echo '<strong>'.$myrow2['part'].'<br></strong>'; //Раздел (цикл запроса разделов не показан)
echo'</p>';//форматирование
$n = $myrow2['id'];//переменная = id таблицы разделов (хотя можно было и без неё)
$result3 = mysql_query("SELECT cats.id, cats.id_parts, cats.cat
FROM cats
JOIN `data` ON cats.id = `data`.id_cat
WHERE cats.id_parts = '
{$n}' ");//запрос категорий в соответствующем разделе
while($myrow3 = mysql_fetch_assoc($result3))//цикл показа категорий
{
echo '<p>';//форматирование
echo '<a href=\'view_cats.php?id='.$myrow3['id'].'\'>'.$myrow3['cat'].'</a><br></strong>';//категории
echo '</p>'; //форматирование
}
?>


попробуй так

Спустя 25 минут, 52 секунды (26.06.2012 - 11:28) MrBrown написал(а):
выдает:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\Lily-Gold\blocks\lefttd.php on line 18
Ну, я понял направление - надо использовать JOIN.
Спасибо.

Спустя 1 минута, 40 секунд (26.06.2012 - 11:30) alexbel2404 написал(а):
Ну прежде чем написать, я проверил на своем сервере запрос) у меня все работало ) значит не правильно заполнены поля в таблицах

Спустя 28 минут, 29 секунд (26.06.2012 - 11:58) MrBrown написал(а):
18-я строчка, на которую ругается скрипт, это -
while($myrow3 = mysql_fetch_assoc($result3))//цикл показа категорий

Ну, если у тебя работает, буду искать у себя кривизну.
Еще раз спасибо.

Спустя 3 минуты, 23 секунды (26.06.2012 - 12:02) alexbel2404 написал(а):
Ошибка говорит о том, что запрос не вернул результат.

Спустя 7 минут, 37 секунд (26.06.2012 - 12:09) MrBrown написал(а):
Поправил строку 17:
$result3 = mysql_query("SELECT `cats`.id, `cats`.id_part, `cats`.cat 
FROM `cats`
JOIN `data` ON `cats`.id = `data`.id_cat
WHERE `cats`.id_part = '
{$n}' ");//запрос категорий в соответствующем разделе

Теперь каждая категория повторяется столько раз, сколько статей в ней находитя. А пустые категории - по одному разу.

Спустя 1 час, 47 минут, 30 секунд (26.06.2012 - 13:57) Renden написал(а):
MrBrown
Я бы вообще сделал один единственный запрос на все 3 таблицы используя JOIN а потом в цикле while уже сделал бы условия, что выводить а что нет..

Спустя 15 минут, 39 секунд (26.06.2012 - 14:13) MrBrown написал(а):
Вот это условие я и не умею сочинить. У меня или показываются все категории, в том числе и пустые, или ни одной, только разделы видны. Прошу помощи.

Спустя 45 минут, 31 секунда (26.06.2012 - 14:58) alexbel2404 написал(а):
сделай так

$result3 = mysql_query("SELECT DISTINCT `cats`.id, `cats`.id_part, `cats`.cat
FROM `cats`
JOIN `data` ON `cats`.id = `data`.id_cat
WHERE `cats`.id_part = '
{$n}' ");//запрос категорий в соответствующем разделе

Спустя 15 минут, 24 секунды (26.06.2012 - 15:14) MrBrown написал(а):
alexbel2404
Уже теплее, почти горячо! Все пустые категории исчезли, только некоторые оставшиеся перепутались местами. Я их сортировал по id
Большое спасибо! Пошел разбираться, что такое DISTINCT

Спустя 8 минут, 11 секунд (26.06.2012 - 15:22) MrBrown написал(а):
Получилось! В конце запроса сгруппировал по ID:
GROUP BY `cats`.id
и все категории встали на свои места, а пустые спрятались.
Всем спасибо за помощь!
Быстрый ответ:

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