Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Tabela łącząca dwie pozostałe tabele
_walus
post 21.02.2013, 01:22:21
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 4.09.2009

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


Hej.

Przeszukałem forum, ale jakoś nie bardzo znalazłem odpowiedź na moje pytanie...

Mam taki mały problem: mam trzy tabele w bazie:
- artykuly (id_artykul, tytul, kategoria, cośtam...)
- osoby (id_osoba, nazwisko, cośtam...)
- artykuly_osoby (id_artykuly_osoby, id_artykul, id_osoba)

i teraz potrzebuję pobrać artykuły o konkretnej kategorii, które napisały jakieś osoby (w tabeli artykuly_osoby jest powiązanie), ale niektóre artykuły mogą być napisane w formie ulotki, czy zapowiedzi, gdzie nie jest podana osoba, bo tekst nie ma autora jako takiego. Udało mi się napisać zapytanie które wiąże artykuły z osobami i wyświetla te do których jest przypisany autor, ale które nie posiadają autora nie są wyciągane z bazy, a na stronie muszą znaleźć się wszystkie artykuły z danej kategorii (te z autorem jak i bez).

Z góry dziękuję za wszelkie przejawy pomocy smile.gif

Pozdrawiam!
Go to the top of the page
+Quote Post
kamil_lk
post 21.02.2013, 02:28:20
Post #2





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


Sprawdź to

  1. SELECT tytul FROM
  2. artykuly, osoby, artykuly_osoby
  3. WHERE artykuly_osoby.id_artykul=artykuly.id_artykul AND
  4. (artykuly_osoby.id_osoba=osoby.id_osoba OR artykuly_osoby.id_osoba=NULL)

Go to the top of the page
+Quote Post
_walus
post 23.02.2013, 18:42:16
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 4.09.2009

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


Przepraszam, że dopiero odpisuję, ale nie miałem czasu się ponownie tym zająć.

Wprowadziłem te zmiany i niestety nie przynosi to zamierzonego efektu sad.gif Nic to nie psuje, ale i nie pomaga... Ma ktoś jeszcze jakieś propozycje?


--------------------
PlanIT.net.pl

---

"Zasady można łamać...
... tak jak ludzi..." ;-)
Go to the top of the page
+Quote Post
daniel1302
post 23.02.2013, 18:51:39
Post #4





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Ja proponowałbym ci przemeblowanie w bazie. Usuń tabelę:
- artykuly_osoby (id_artykuly_osoby, id_artykul, id_osoba)
do tabeli artykuły dodaj: autor(ID autora artykułu)
Teraz masz dużo prostsze zapytanie, a jak potrzebujesz nick usera to prosty JOIN

  1. SELECT a.id_artykul, a.autor, a.tytul, a.kategoria, o.id_osoba, o.nazwisko FROM artykuly a LEFT JOIN osoby o ON a.autor=o.id_osoba WHERE a.kategoria IN (1,2,4,6,7,12,543) OR a.autor IN (1,2,4,6)


WHERE a.kategoria IN (1,2,4,6,7,12,543) OR a.autor IN (1,2,4,6)
Ta część robi tak, że pobiera tylko rekordy które mają kateegorię równą 1 lub 2, lub 4 lub 6... Albo autorem jest ID 1 lub 2 lub 4 lub 6.

Ten post edytował daniel1302 23.02.2013, 18:51:53
Go to the top of the page
+Quote Post
_walus
post 23.02.2013, 18:55:51
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 4.09.2009

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


Tylko jest jeden problem to jest już baza istniejącego serwisu i nie bardzo mogę w bazie ingerować - w sensie struktury...


--------------------
PlanIT.net.pl

---

"Zasady można łamać...
... tak jak ludzi..." ;-)
Go to the top of the page
+Quote Post
daniel1302
post 23.02.2013, 19:46:29
Post #6





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


  1. SELECT t.id_artykul, t.id_osoba, a.tytul, a.kategoria, o.id_osoba, o.nazwisko FROM artykuly_osoby t
  2. LEFT JOIN osoby o ON t.id_osoba=o.id_osoba
  3. LEFT JOIN artykuly a ON a.id_artykul=t.id_artykul
  4. WHERE a.kategoria IN (1,2,4,6,7,12,543) OR t.id_osoba IN (1,2,4,6)

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 19:20