Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skomplikowane zapytanie, Skomplikowane zapytanie, powiela wyniki
llukasz
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 15.05.2007

Ostrzeżenie: (0%)
-----


Witam.

Mam takie nieco chaotyczne zapytanie:

  1. 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
)

)



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...

Ten post edytował llukasz 28.01.2009, 12:58:52
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Cytat
Mam takie nieco chaotyczne zapytanie:


Nieco to delikatnie powiedziane.
Poczytaj o złączeniach (JOIN), wtedy na pewno uprościsz sobie to zapytanie.

Wg. mnie:
1. Masz tak skonstruowany warunek, że jest prawdziwy jeszcze dla kilku innych rekordów.
albo:
2. Jesli jesteś w 100% prawidłowości zapytania, zrób sobie GROUP BY newsy.id
Go to the top of the page
+Quote Post
llukasz
post
Post #3





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 15.05.2007

Ostrzeżenie: (0%)
-----


Jeśli chodzi o JOIN, próbowałem, efekt był identyczny (przynajmniej na pierwszy rzut oka, wszystko powielone). Spróbuję te group.

EDIT Zadziałało GROUP BY, dzięki za pomoc (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) przyda się bo mój umysł wytworzył takich chaotycznych zapytań więcej pozdrawiam serdecznie

Ten post edytował llukasz 28.01.2009, 14:21:40
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.12.2025 - 05:49