Mam takie nieco chaotyczne zapytanie:
SELECT n.*, k.*, k1.* FROM newsy n, newsy_kategorie k, newsy_kategorie k1 WHERE (n.aktywny=1 AND n.glowna=1 AND n.archiwum=0) AND (n.kategoria=0 OR ((k.id=n.kategoria AND k.aktywna=1) AND (k.kategoria=0 OR (k1.id=k.kategoria AND k1.aktywna=1))))
Na język ludzki chodzi o to:
Mam pole z newsem, przypisanym do jakiejś kategorii, najpierw sprawdzam czy w ogóle news ma być publikowany (opcje aktywny, glowna i archiwum) jak tak patrzę czy kategoria do której jest przypisany ma opcję aktywny uruchomioną (jeśli nie został przypisany do kategorii na tym sprawdzanie się kończy), gdy ma patrzę czy kategoria nadrzędna jest aktywna, i na tym ten łańcuch się kończy, chce pobrać wszystkie newsy spełniające te kryteria, a także wszystkie opcje kategorii (jeśli przypisano) i kategorii nadrzędnej (też jeśli przypisano) każdego newsa żeby jeszcze inne opcje później z nich wykorzystać...
Jego wynik jest taki (w bazie jest zapisany akurat tylko jeden rekord spełniający kryteria):
CODE
Array
(
[0] => Array
(
[id] => 6
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria3
[aktywna] => 1
)
[1] => Array
(
[id] => 6
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria3
[aktywna] => 1
)
[2] => Array
(
[id] => 6
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria3
[aktywna] => 1
)
[3] => Array
(
[id] => 6
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria3
[aktywna] => 1
)
[4] => Array
(
[id] => 4
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria1
[aktywna] => 1
)
[5] => Array
(
[id] => 4
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria1
[aktywna] => 1
)
[6] => Array
(
[id] => 4
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria1
[aktywna] => 1
)
[7] => Array
(
[id] => 4
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria1
[aktywna] => 1
)
[8] => Array
(
[id] => 7
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria2
[aktywna] => 1
)
[9] => Array
(
[id] => 7
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria2
[aktywna] => 1
)
[10] => Array
(
[id] => 7
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria2
[aktywna] => 1
)
[11] => Array
(
[id] => 7
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria2
[aktywna] => 1
)
[12] => Array
(
[id] => 8
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria4
[aktywna] => 1
)
[13] => Array
(
[id] => 8
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria4
[aktywna] => 1
)
[14] => Array
(
[id] => 8
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria4
[aktywna] => 1
)
[15] => Array
(
[id] => 8
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria4
[aktywna] => 1
)
)
(
[0] => Array
(
[id] => 6
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria3
[aktywna] => 1
)
[1] => Array
(
[id] => 6
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria3
[aktywna] => 1
)
[2] => Array
(
[id] => 6
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria3
[aktywna] => 1
)
[3] => Array
(
[id] => 6
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria3
[aktywna] => 1
)
[4] => Array
(
[id] => 4
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria1
[aktywna] => 1
)
[5] => Array
(
[id] => 4
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria1
[aktywna] => 1
)
[6] => Array
(
[id] => 4
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria1
[aktywna] => 1
)
[7] => Array
(
[id] => 4
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 0
[archiwum] => 0
[nazwa] => Kategoria1
[aktywna] => 1
)
[8] => Array
(
[id] => 7
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria2
[aktywna] => 1
)
[9] => Array
(
[id] => 7
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria2
[aktywna] => 1
)
[10] => Array
(
[id] => 7
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria2
[aktywna] => 1
)
[11] => Array
(
[id] => 7
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria2
[aktywna] => 1
)
[12] => Array
(
[id] => 8
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria4
[aktywna] => 1
)
[13] => Array
(
[id] => 8
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria4
[aktywna] => 1
)
[14] => Array
(
[id] => 8
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria4
[aktywna] => 1
)
[15] => Array
(
[id] => 8
[tytul] => News 1
[data] => 25-01-2009
[autor] => Admin
[tresc] =>
TREŚĆ
[skrot] =>
SKRÓT
[glowna] => 1
[aktywny] => 1
[data_w] => 1
[tytul_w] => 1
[autor_w] => 1
[tytul_link] => 1
[kategoria] => 4
[archiwum] => 0
[nazwa] => Kategoria4
[aktywna] => 1
)
)
I problem: jak widać w wyniku to co mi jest potrzebne (wartości n. k. i k1. spełniające kryteria) są powielone wielokrotnie, a chcę je tylko raz, nie wiem co źle zrobiłem w tym zapytaniu...