Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie do trzech tabel
gennebis
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.10.2011

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


Mam trzy tabele:

news
- id
- title
- content

tags
- id
- name

news_tags
- news_id
- tags_id

Potrzebuję pobrać jednym zapytaniem z tych trzech tabel w formie:
  1. Array([0] => Array([id] => 1, [title] => Tytuł, [content] => ..., [tags] => Array([0] => nazwa_tagu1, [1] => nazwa_tagu2));


Zrobiłem zapytanie w ten sposób:
  1. SELECT news.id, news.title, tags.name FROM news
  2. LEFT JOIN news_tags
  3. INNER JOIN tags
  4. ON news_tags.news_id = tags.id
  5. ON news_tags.news_id = news.id


Ale otrzymuję wynik:

  1. Array ( [0] => Array ( [id] => 1 [title] => Lorem ipsum sit amet [name] => Lorem ) [1] => Array ( [id] => 1 [title] => Lorem ipsum sit amet [name] => Lorem ) [2] => Array ( [id] => 1 [title] => Lorem ipsum sit amet [name] => Lorem ) )


a nie o to mi chodziło. Proszę o pomoc w łączeniu tabel jestem laikiem :/
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




ON ma byc bezposrednio po JOIN NAZWA_TABELI a nie jak to zrobiles teraz na zasadzie nawiasow otwierajacych i zamykajacych.

Po drugie:
musisz te dane obrobic w php i stworzyc tablice jaką chcesz.
Od biedy mozesz pobawic sie z GROUP BY i GROUP_CONCAT.
Obie metody masz opisane tutaj:
http://nospor.pl/grupowanie-wynikow.html
Go to the top of the page
+Quote Post
gennebis
post
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.10.2011

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


Nie chodzi o to bo dane sobie obrobię w php bez problemu, tylko pobiera mi nazwy tagów 3 takie same o powinien 3 inne i nie rozumiem gdzie jest błąd.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




A poprawiles JOINy jak ci napisalem?
Go to the top of the page
+Quote Post
gennebis
post
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.10.2011

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


Ta

  1. SELECT news.id, news.title, tags.name FROM news
  2. LEFT JOIN news_tags ON news_tags.news_id = news.id
  3. INNER JOIN tags ON news_tags.news_id = tags.id
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Kurka... ale patrz co z czym łączysz...
O tu
INNER JOIN tags ON news_tags.news_id = tags.id
masz łączyc tag z tagiem a nie news z tagiem.... to to są rozne id news i tag.
Go to the top of the page
+Quote Post
gennebis
post
Post #7





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.10.2011

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


A faktycznie.

  1. SELECT news.id, news.title, tags.name FROM news
  2. LEFT JOIN news_tags ON news_tags.news_id = news.id
  3. INNER JOIN tags ON news_tags.tags_id = tags.id


To już działa poprawnie daje taki wynik.

  1. Array ( [0] => Array ( [id] => 1 [title] => Lorem ipsum sit amet [name] => Lorem ) [1] => Array ( [id] => 1 [title] => Lorem ipsum sit amet [name] => Ipsum ) [2] => Array ( [id] => 1 [title] => Lorem ipsum sit amet [name] => Sit ) )


Czyli rozumiem, że nie da się zrobić w ten sposób, że zamiast wybierać każdy news po n razy i na końcu mieć [name] => nazwa_tagu, wybrać każdy news jeden raz i mieć na końcu [tags] => Array([0] => nazwa1, [1] => nazwa2) bez obróbki przez php?
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




przeciez pisalem:
Cytat
Od biedy mozesz pobawic sie z GROUP BY i GROUP_CONCAT.
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: 21.12.2025 - 16:49