Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Łączona baza danych 3 tabele
aska12
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 23.10.2013

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


Witam ma mały problem chcę z 3 tabel w bazie wypisać nazwy po ich id

  1. SELECT problemy.nazwa, problemy.user_id, kategorie.nazwa_k, problemy.tresc, problemy.DATA, user.user, user.id, problemy.id_kat FROM problemy, user, kategorie WHERE problemy.user_id = user.id & problemy.id_kat = kategorie.nazwa_k

tabela
user

id
haslo
login

problemy
id
nazwa
user_id
tresc
id_kat
data

kategorie
id
nazwa_k

co chcę wyświetlić
nazwa pobrana z problemy
user pobrany z user
tresc pobrane z problemy
nazwa_k pobrane z kategorie
data pobrane z problemy

bo teraz baza danych wywołuje mi się 6 razy a powinna tylko 2
Go to the top of the page
+Quote Post
robertpiaty
post
Post #2





Grupa: Zarejestrowani
Postów: 113
Pomógł: 18
Dołączył: 7.10.2007
Skąd: Pruszków

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


Użyj left joinów i określ po jakich kolumnach łączą się tabele lub zamiast jednego & użyj && Ja rzadko kiedy łącze tak ze sobą tabelę - przeważnie używam joinów.

-----
Właśnie zauważyłem że masz błąd w where
  1. problemy.id_kat = kategorie.nazwa_k

powinno być
  1. problemy.id_kat = kategorie.id


Ten post edytował robertpiaty 9.03.2015, 21:00:53


--------------------
Go to the top of the page
+Quote Post
sazian
post
Post #3





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


i nie & tylko AND
Go to the top of the page
+Quote Post
robertpiaty
post
Post #4





Grupa: Zarejestrowani
Postów: 113
Pomógł: 18
Dołączył: 7.10.2007
Skąd: Pruszków

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


w MySQL można stosować i && i AND http://dev.mysql.com/doc/refman/5.0/en/log...ml#operator_and Tak samo jak znak nierówności. Jak uczyłem się SQL to zawsze wbijano mi do głowy znak <> a MySQL przyjmie też !=


--------------------
Go to the top of the page
+Quote Post
com
post
Post #5





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


@up tak tylko ze && a nie &, tyle ze to jest nie eleganckie, a dodano bo mysql musialbyc i.. odporny, a druga kwestia to wszelakie ide chyba tego nie znaja choc nie dam glowy bo nie sprawdzalem smile.gif

A tak swoja droga to uzywany tu jest join tylko ten napis zastepowny jest ,
Bo znow programisci byli zbyt leniwi biggrin.gif

Ten post edytował com 9.03.2015, 23:45:34
Go to the top of the page
+Quote Post
fosjoas2015
post
Post #6





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 4.03.2015

Ostrzeżenie: (10%)
X----


"Tabela 'nieprzeczytane':
- userID
- msgID albo topicID (co niesie za sobą pewne wady, ale też uproszczenia)

Przy odświeżaniu strony przez użytkownika, sprawdzamy datę jego ost. odświeżenia strony i pobieramy z tabeli postów ID tych wiadomości, które mają datę > niż data użytkownika. Uzupełniamy tabelę tymi wpisami. Aby zapobiec przepełnieniu, możemy przy dodawaniu rekordów do tabeli sprawdzić jeszcze, czy np.
Go to the top of the page
+Quote Post
robertpiaty
post
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 18
Dołączył: 7.10.2007
Skąd: Pruszków

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


Cytat(com @ 9.03.2015, 23:43:41 ) *
[...]
A tak swoja droga to uzywany tu jest join tylko ten napis zastepowny jest ,
Bo znow programisci byli zbyt leniwi biggrin.gif


Tak masz rację to też jest join, chociaż tak nie do końca. Pamiętam że kiedyś miałem z tym problem. Nie pamiętam dokładnie z czym, ale chyba chodziło o coś w tym stylu
  1. SELECT * FROM a,b,c LEFT JOIN d ON(d.id = b.d_id) WHERE {tutaj wszystkie warunki złączeń} AND d.id IS NULL


I chyba właśnie w tym przypadku w klauzuli on przy left join krzyczał że nie zna b.d_id. Tak jak pisałem nie pamiętam dokładnie o co chodziło ale chyba o to.


--------------------
Go to the top of the page
+Quote Post
com
post
Post #8





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


robertpiaty owszem zgadam się z Toba w zupełności, nie każdego joina da się , zastąpić. Dlatego też powstało mimo wszystko tyle ich rodzai, ale czasem się da, niestety złączenia trzeba zrozumieć żeby nie było problemów. Tu nawet to zostało obrazowo pokazane http://www.sitepoint.com/understanding-sql...mysql-database/. Oczywiście to do autora tematu kieruje smile.gif
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 Aktualny czas: 19.08.2025 - 07:38