Witam.
Użeram się już kilka godzin ale jednak PL/SQL nie jest moją mocną stroną. Potrzebuje stworzyć zapytanie do bazy MySQL, które wyciągnie mi ID wszystkich rekordów z tabeli ITEMS, które posiadają CATEGORY_ID równą podanej wartości. Ponadto te wartości są dynamicznie ładowane przez stworzone drzewo kategorii z tabeli CATEGORY od danego ID do wszystkich subkategorii zawierających PARENT_ID.
Nie bardzo umiem to wytłumaczyć więc logikę tego zamknąłem w PHP
private function getCategorys($id) {
$q = $this->db->query ( "SELECT id FROM tbl_category WHERE parent_id = '$id';" );
while ( $r = $this->db->fetch ( $q ) ) {
$this->getItems ( $r ['id'] );
$this->getCategorys ( $r ['id'] );
}
}
private function getItems($id) {
global $array_item;
$q = $this->db->query ( "SELECT id FROM tbl_item WHERE category_id = '$id';" );
while ( $r = $this->db->fetch ( $q ) ) {
$array_item [] = $id;
}
}
public function getCategoryItem($id) {
global $array_item;
$array_item = array ();
$this->getCategorys ( $id );
$this->getItems( $id );
return $array_item;
}
CREATE TABLE IF NOT EXISTS `tbl_category` (
`id` int(11) NOT NULL,
`parent_id` int(11) NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `tbl_cateogry` (`id`, `parent_id`, `name`) VALUES
(1, 0, 'Baza'),
(2, 0, 'Category1'),
(3, 2, 'Sub1'),
(4, 2, 'Sub2'),
(5, 0, 'Category2'),
(6, 5, 'Sub3');
CREATE TABLE IF NOT EXISTS `tbl_item` (
`id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
INSERT INTO `tbl_item` (`id`, `category_id`, `name`,) VALUES
(1,2, 'Item'),
(2,3, 'Item'),
(3,3, 'Item'),
(4,4, 'Item'),
(5,6, 'Item');
i wywołując metodą getCategoryItem(2); dostanę tablicę id = array(1,2,3,4)
Ale naprawdę nie umiem tego ugryźć w jednym zapytaniu a tak nadziabane w PHP jest karygodne nie mówiąc o czasie wykonywania przy większej ilości rekordów.
Prosiłbym o pomoc.