Also ich hätte das alles etwas anders aufgeteilt, was nicht unbedingt heißen soll das es so besser ist.
Tabelle "products"
product_id, category_id, product_title, product_number, product_description, product_price
Tabelle "categories"
category_id, category_id_parent, category_title, category_products_count
Wieso gibt es bei dir zwei Tabellen für die Kategorien? Ich denke das _h steht für "Haupt" und _u für Unterrubriken, richtig? Am besten packst du das alles in eine Tabelle, das schonmal nur so nebenbei.
In die Spalte "category_product_count" würde ich dann die Anzahl der Artikel schreiben die innerhalb dieser Kategorie liegen, sofern category_id_parent == 0 ist ist es eine Hauptkategorie, wenn dort eine Zahl eingetragen ist, ist es eine Unterrubrik der jeweiligen Hauptkategorie.
Ob du category_product_count jetzt via Cron einmal am Tag berechnest oder eben "live" sobald Produkte hinzu oder gelöscht werden ist erstmal egal. Solltest du wirklich nur wenige Produkte in dieser Datenbank haben kannst du sicherlich auch folgendes machen, wobei ich davon abraten würde, zwecks vorrausschauender entwicklung.
Das auslesen der KAtegorien scheint ja bei dir bereits zu klappen du möchtest ja lediglich die ausblenden die keine Artikel haben, demnach musst du folgendes machen:
PHP-Code:
<?php
$row_main_check = mysql_fetch_assoc(mysql_query("SELECT COUNT(id) AS count FROM produkte WHERE h_id = '".(int)$h_id."'"));
if($row_main_check['count'] >= 1) {
// Kategorie enthält Produkte also zeige sie an
}
?>
Das selbe musst du dann innerhalb der Schleife machen wo du die Unterkategorien ausgibst, vielleicht hilft dir das ja weiter.
Wie gesagt empfinde ich die Lösung mit der Spalte in der die Anzahl der vorhandenen Artikel gespeichert werden auf jedenfall schöner und strapaziert die Datenbank sicherlich auch weniger wenn irgendwann vll mal mehrere Hundertausend Produkte in der Datenbank sind.