PDO select z 2 tabel jednocześnie

0

Witam, potrzebuję zwrócić wszystkie rekordy z 2 tabel jednocześnie gdzie nick to sesja zalogowanego. Czy jest na to jakiś skuteczniejszy sposób jak pisanie dwóch zapytań gdzie zwracam wszystkie rekordy najpierw z jednej tabeli a później z drugiej?

2

user image

0

Poczytaj sobie o czymś takim jak: JOIN w MySQLu. Za jego pomocą można właśnie wyciągnąć dane od razu z dwóch tabeli.
Jak nie będzie mógł czegoś zrozumieć / napisać. To opisz jak dokładnie wygląda u ciebie struktura w bazie danych.

0
		$stmt=$this->db->prepare('SELECT * FROM tabelaA INNER JOIN tabelaB WHERE tabela.nick =: tabela.nick');
		$stmt->bindParam(':nick',$_SESSION['sesja_zalogowanego'],PDO::PARAM_STR);
		$stmt->execute();
		foreach($stmt as $row)
{

}

Mam takie zapytanie, lecz wyświetla Mi błąd. W jaki sposób bindować parametry podczas łączenia tabel w PDO ?

0

Binduje się w dokładnie taki sam sposób. Bindowanie nie zależy od tego co jest w zapytaniu.

W zapytaniu zapomniałeś o ON. Spróbuj coś takiego.

SELECT * FROM tabelaA INNER JOIN tabelaB ON tabelaA.jednaKolumna = tabelaB.innaKolumna WHERE tabelaA.nick = :nick;
0

A co mają znaczyć te tabelaA.jedna_kolumna = tabelaB.inna_kolumna do czego odnosić ma ta jedna_kolumna oraz inna_kolumna ?

0

TabelaA - załóżmy że to tabela z identyfikatorami sesji, a kolumna w niej ( jedna_kolumna ) to np. session_id ( nie wiem jak to nazwałeś ).
TabelaB - to na przykład tabela z nickami i identyfikatorami i tam odwołujesz się do identyfikatora.

Czyli np.
TabelaA
id | session_id
1 | 123456

TabelaB
id | nick
1 | superNick

SELECT * FROM TabelaA INNER JOIN TabelaB ON TabelaA.id = TabelaB.id WHERE TabelaA.session_id = :id_sesji;
Szybki przykład wyniku z phpMyAdmin:
7b62116b54.png
Mam nadzieję, że przynajmniej mniej więcej rozjaśniłem ;)

0

Dziękuje, sporo Mi rozjaśniłeś, lecz mam jeszcze problem, mianowicie wyświetla Mi tylko produkty z tabeli kupione, a zrealizowanych nie widzi.

Tabela kupione
id | produkt | cena | nick
14 | Stojak | 200 | sesja_usera

Tabela zrealizowane
id | nr_faktury | produkt | cena | nick
1 | 14 | Ścianka |2000 | sesja_usera

$stmt=$this->db->prepare('SELECT * FROM zrealizowane INNER JOIN kupione ON zrealizowane.nick = kupione.nick WHERE zrealizowane.nick = :nick'); 

Tabele te łączy sesja usera, gdyż w obu jest taka sama.

0

Ogólnie to chodzi mi o to, aby wyciągało z bazy wszystkie rekordy z 2 tabel, gdzie identyfikatorem jest zmienna sesyjna, nawet jak w drugiej tabeli tej zmiennej nie będzie, musi wyciągać z pierwszej, a jak będzie też w drugiej, to z pierwszej i drugiej.

1

Wyobraź sobie, że w lewej nawie w kościele siedzą faceci, a w prawej nawie kobiety.

Jeżeli wstaną tylko Ci faceci, którzy mają żony spośród kobiet w prawej nawie, wezmą je za rękę i wyjdą z kościoła, to to jest INNER JOIN, bo wyjdą tylko pary.

Jeżeli wstaną wszyscy faceci, a Ci którzy mają żony spośród kobiet w prawej nawie, wezmą je za rękę i wyjdą z kościoła, to to jest LEFT JOIN, bo wyjdą kawalerzy i kilka par.

A co mają znaczyć te tabelaA.jedna_kolumna = tabelaB.inna_kolumna

lewaNawa.facet = parwaNawa.mąż

1 użytkowników online, w tym zalogowanych: 0, gości: 1