Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Mieszanie zapytań
Forum PHP.pl > Forum > Przedszkole
sobol6803
Witam. Mam malutki problem, ponieważ chcę połączyć 2 selecty z bazy do 1 pętli (raz wyświetli kolumnę z 1 selecta, raz z drugiego). Korzystam z PDO, więc do pobrania wyników muszę użyć pętli foreach. Działa to dobrze dla 1 selecta, jednak jeśli chcę, żeby z 2 selecta mi się wyświetliło pole, to tu się zaczyna problem. smile.gif Ogólnie nie jestem pewien, czy potrzebuję 2 selectów, ale wydaje mi się, że nie da się tego zrobić w 1.

Opis szczegółowy:

Mam 2 tabele w bazie (w uproszczeniu, kolumny tylko te, co mnie interesują):

users:
Kod
+---user_id---+---username---+
|       1     |     nick     |
|       2     |  fajny_nick  |
+-------------+--------------+


privmsgs:
Kod
+---msg_id---+---author_id---+---to_address---+---message_text---+
|      1     |       2       |      u_1       |       tekst      |
|      2     |       1       |      u_2       |    inny tekst    |
+------------+---------------+----------------+------------------+


Chcę docelowo wypisać:
-nazwa użytkownika, który wysłał wiadomość (czyli JOIN users.username z privmsgs.author_id)
-odbiorca wiadomości (czyli JOIN users.username z privmsgs.to_address)
-wiadomość (czyli privmsgs.mesagge_text)

Pola:
author_id = user_id
oraz
user_to = REPLACE(privmsgs.to_address, "u_", "")

Napisałem 2 selecty:
  1. $query = 'SELECT * FROM privmsgs
  2. INNER JOIN users
  3. ON privmsgs.author_id = users.user_id
  4. ORDER BY privmsgs.msg_id DESC
  5. LIMIT 30';
  6. $select = $pdo->query($query);


  1. $query2 = 'SELECT * FROM privmsgs
  2. INNER JOIN users
  3. ON REPLACE(privmsgs.to_address, "u_", "") = users.user_id
  4. ORDER BY privmsgs.msg_id DESC
  5. LIMIT 30';
  6. $select2 = $pdo->query($query2);


Same selekty działają i pobierają mi to, co chcę (przy okazji paręnaście niepotrzebnych kolumn więcej, ale to szczegół na tą chwilę), jednak skończyły mi się pomysły jak to połączyć, żeby wygenerować tabelkę z kolumnami:
od | do | wiadomość

Ktoś ma jakieś pomysły? Da się połączyć te selecty, czy może jakaś sztuczka z pętlami foreach, na którą nie wpadłem?

Pozdrawiam i z góry dzięki za odpowiedź. smile.gif

PS. Przydałoby się w php: foreach ($assoc as $v && $assoc2 as $v2) oneeyedsmiley02.png
CuteOne
  1. SELECT
  2. u1.username AS author,
  3. u2.username AS user_to,
  4. p.message_text
  5. FROM
  6. privmsgs p
  7. LEFT JOIN users u1 ON p.author_id = u1.user_id
  8. LEFT JOIN users u2 ON REPLACE(p.to_address, "u_", "") = u2.user_id
  9. ORDER BY privmsgs.msg_id DESC LIMIT 30
sobol6803
Cytat(CuteOne @ 15.07.2012, 03:06:51 ) *
  1. SELECT
  2. u1.username AS author,
  3. u2.username AS user_to,
  4. p.message_text
  5. FROM
  6. privmsgs p
  7. LEFT JOIN users u1 ON p.author_id = u1.user_id
  8. LEFT JOIN users u2 ON REPLACE(p.to_address, "u_", "") = u2.user_id
  9. ORDER BY privmsgs.msg_id DESC LIMIT 30


Kocham Cię! biggrin.gif To są aliasy, tak? Muszę o tym poczytać trochę. smile.gif

Dzięki wielkie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.