![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Przyjaciele php.pl Postów: 660 Pomógł: 0 Dołączył: 28.08.2002 Skąd: Starachowice Ostrzeżenie: (0%) ![]() ![]() |
Mam takie zapytanie:
[sql:1:bbebac0bac]SELECT c.id AS id, c.name AS name, c.description AS description, count( distinct i.id ) AS total FROM categories c LEFT JOIN image i ON (i.id_category=c.id AND i.status='1') WHERE c.status = '1' AND c.id_parent = '$id' GROUP BY c.id ORDER BY c.name[/sql:1:bbebac0bac] Wyciąga ono informacje o Galeriach zdjęć takie jak: nazwa galerii, opis i liczbe zdjęć jakie wchodzą w skład galerii. Działa doskonale, ale wprowadziłem jeszcze możliwość blokowania użytkowników i w takim przypadku, gdy użytkownik jest zablokowany, jego zdjęcia nie są wyświetlane, a więc nie powinny być też zliczane. Dodałem więc linijkę: [sql:1:bbebac0bac]INNER JOIN users u ON ( u.id = i.id_user AND ( u.status='1' OR ( u.status='0' AND u.permissions='9' ) ) )[/sql:1:bbebac0bac] po LEFT JOIN'ie. Działa prawie dobrze, bo wycina zdjęcia, należące do zablokowanego usera, ale jeżeli zdjęć w galerii zostanie 0 - czyli wytnie wszystkie, to nie zwraca żadnych ionformacji o takiej galerii, a powinno zwrócić z liczbą zdjęc wynoszącą '0' - INNER wycina wszystko w pień ![]() Jak zrobić, aby zwracało informacje o wszystkich galeriach, nawet o tych w których liczba fotografii == 0? Podaję uproszczone struktury tabel, na których operuje to zapytanie: [sql:1:bbebac0bac]CREATE TABLE categories ( id int(11) unsigned NOT NULL auto_increment, id_parent int(11) unsigned default '0', name varchar(32) default NULL, description varchar(255) default NULL, status tinyint(1) default '0', PRIMARY KEY (id) ) TYPE=MyISAM; CREATE TABLE image ( id int(11) unsigned NOT NULL auto_increment, id_category int(11) unsigned default NULL, id_user int(11) unsigned default NULL, status tinyint(1) default '0', PRIMARY KEY (id) ) TYPE=MyISAM; CREATE TABLE users ( id int(11) unsigned NOT NULL auto_increment, permissions tinyint(1) unsigned default '0', status tinyint(1) default '1', PRIMARY KEY (id) ) TYPE=MyISAM; [/sql:1:bbebac0bac] |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Tak ponoć działa
![]() [sql:1:b475be7a15]SELECT c.id AS id, u.status AS ustatus, SUM( if( u.status = '1' , 1, 0 ) ) FROM categories c LEFT JOIN image i ON ( i.id_category = c.id AND i.status = '1' ) LEFT JOIN users u ON ( u.id = i.id_user AND u.status = '1' ) WHERE c.status = '1' AND c.id_parent = '1' GROUP BY c.id ORDER BY c.name[/sql:1:b475be7a15] -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 660 Pomógł: 0 Dołączył: 28.08.2002 Skąd: Starachowice Ostrzeżenie: (0%) ![]() ![]() |
Dokładnie to tak:
[sql:1:9b8c224389]SELECT c.id AS id, c.name AS name, c.description AS description, SUM( IF( u.status = '1' OR u.permissions = '9', 1, 0) ) AS total FROM categories c LEFT JOIN image i ON ( i.id_category=c.id AND i.status='1' ) LEFT JOIN users u ON ( u.id = i.id_user ) WHERE c.status = '1' AND c.id_parent = '$id' GROUP BY c.id ORDER BY c.name[/sql:1:9b8c224389] Ale to jest to ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.04.2025 - 08:31 |