/**
* Funkcja która zwraca ridzica kategorii. Jeśli kategoria nie ma rodzica lub kategoria o podanym id nie istnieje zwracane jest 0
* @param int $id
* @return int
*/
function getParentId($id) {
// $q = "SELECT * FROM kat WHERE id_parent = '$id'";
// $res = mysql_query($q);
// if ($r = mysql_fetch_array($res)) {
// return (int)$r['id'];
// }
// return 0;
switch($id) {
case '5': return 4;
case '4': return 3;
case '3': return 2;
case '2': return 1;
case '1': return 0;
default: return 0;
}
}
/**
* Funkcja zwraca id-ki przodków wybranej kategorii w kolejności od najmłodszego do najstarszego przodka
* @param int $id
* @param array $ancastorsIds
* @return array
*/
function getAncastorsIds
($id, &$ancastorsIds = array()) { //Drugi parametr jest tylko na potrzeby rekurencji. $parentId = getParentId($id);
if ($parentId) {
getAncastorsIds($ancastorsIds[] = $parentId, $ancastorsIds);
}
return $ancastorsIds;
}
echo ' kat IN ('.implode(',', getAncastorsIds
(5)).') '; //Wynik: kat IN (4,3,2,1)
Rozbiłem wszystko na dwie metody. W metodzie getParentId zakomentowałem kod który prawdopodobnie będzie działał u Ciebie. Switch w tej metodzie symuluje wyciąganie danych z bazy danych.
Takie rozwiązanie działa ale jest od razu radzę zainteresować się
tym modelem. Przy zastosowaniu tego modelu twój problem sprowadzał by się do wykonania jednego i tylko jednego zapytania do bazy danych niezależnie od położenie kategorii w strukturze.
... a do komunikacją z bazą danych polecam
PDO