#php #mysql
#php #mysql
Вопрос:
Возникла проблема с query..my в wscategories хранятся основные категории интернет-магазина, а в моей таблице wssubcategories хранятся подкатегории таблицы с внешним ключом, называемым «parentcategory». Я пытаюсь перечислить основные категории с подкатегориями под ними в стиле:
Верх
Футболки
Плетеные
Свитера
Брюки
Шорты
Джинсы
Запрос / результат, который я написал, следующий:
$query = "SELECT DISTINCT a.categoryname AS maincategory, b.categoryname AS
smallcategory FROM wscategories a, wssubcategories b WHERE a.SECTION = 'girls' AND
b.parentcategory = a.id";
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result))
{
echo $row['maincategory'];
echo "<br/>";
echo $row['smallcategory'];
echo "<br/>";
}
Который возвращает:
Верх
Футболки
Верх
Свитера
Верх
Плетеные
И т.д. Я хочу, чтобы скрипт просто отображал основную категорию один раз, а затем подкатегории под ней, а не отображал ее несколько раз. Любая помощь?
Ответ №1:
попробуйте что-то вроде этого
// note we need to order by maincategory for this to work
//
$query = "SELECT DISTINCT a.categoryname AS maincategory, b.categoryname AS
smallcategory FROM wscategories a, wssubcategories b WHERE a.SECTION = 'girls' AND
b.parentcategory = a.id
ORDER BY maincategory ASC,
smallcategory ASC
";
$result = mysql_query($query) or die(mysql_error());
// keep track of previous maincategory
$previous_maincategory = NULL;
while ($row = mysql_fetch_assoc($result))
{
// if maincategory has changed from previouscategory then display it
if ($previous_maincategory != $row['maincategory']) {
echo $row['maincategory'];
}
echo "<br/>";
echo $row['smallcategory'];
echo "<br/>";
// record what the previous category was
$previous_maincategory = $row['maincategory'];
}
Ответ №2:
Установите флаг после повторения основной категории, например:
$echoed_main = false;
while ($row = mysql_fetch_array($result)) {
if (!$echoed_main) {
echo $row['maincategory'];
echo "<br/>";
$echoed_main = true;
}
echo $row['smallcategory'];
echo "<br/>";
}