Таблица разделов 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.
Спасибо.
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 уже сделал бы условия, что выводить а что нет..
Я бы вообще сделал один единственный запрос на все 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
Уже теплее, почти горячо! Все пустые категории исчезли, только некоторые оставшиеся перепутались местами. Я их сортировал по id
Большое спасибо! Пошел разбираться, что такое DISTINCT
Спустя 8 минут, 11 секунд (26.06.2012 - 15:22) MrBrown написал(а):
Получилось! В конце запроса сгруппировал по ID:
Всем спасибо за помощь!
GROUP BY `cats`.idи все категории встали на свои места, а пустые спрятались.
Всем спасибо за помощь!