Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP][MySQL]Tabela łącząca dwie pozostałe tabele

Napisany przez: _walus 21.02.2013, 01:22:21

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!

Napisany przez: kamil_lk 21.02.2013, 02:28:20

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)


Napisany przez: _walus 23.02.2013, 18:42:16

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?

Napisany przez: daniel1302 23.02.2013, 18:51:39

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.

Napisany przez: _walus 23.02.2013, 18:55:51

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

Napisany przez: daniel1302 23.02.2013, 19:46:29

  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)


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)