--tabela łącząca właściciela ze swoją stroną CREATE TABLE `site` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `user_id` (`user_id`), CONSTRAINT `user_ids` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- CREATE TABLE `section` ( `id` int(11) NOT NULL AUTO_INCREMENT, `site_id` int(11) NOT NULL, `name` varchar(255) NOT NULL, `section_position` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `site_id` (`site_id`), CONSTRAINT `site_id` FOREIGN KEY (`site_id`) REFERENCES `site` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `page` ( `id` int(11) NOT NULL AUTO_INCREMENT, `section_id` int(11) NOT NULL, `name` varchar(255) NOT NULL, `position` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `section_id` (`section_id`), CONSTRAINT `section_id` FOREIGN KEY (`section_id`) REFERENCES `section` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
W skrócie menu miałoby wyglądać:
site_id (zależnie od tego miałoby wyciągać sekcje, a na podstawie sekcji wyciąganie stron
SECTION position 1 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje)
page position 1 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 1
page position 2 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 1
page position 3 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 1
SECTION position 2 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje)
page position 1 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 2
page position 2 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 2
page position 3 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 2
.
.
.
SECTION position ostatnia (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje)
page position 1 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją ostatnia
page position 2 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją ostatnia
page position 3 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją ostatnia
Jakie zapytanie do tego ułożyć i jak to w miarę dobrze wyświetlić pętlą
Ok to może inaczej postanowiłem to rozbić na 2 zapytania z pierwszym nie mam problemu :
wyciągnięcie sekcji
SELECT * FROM section where site_id='1' ORDER BY `section_position`;
ale z drugim zapytaniem mam już problem bo nie wiem jak wyciągnąć strony których section_id ma przypisane site_id='1'
zapytanie
SELECT page.id, page.name from page, section where section.site_id='1' podwaja mi wyniki