Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Mieszanie zapytań
sobol6803
post 15.07.2012, 01:44:37
Post #1





Grupa: Zarejestrowani
Postów: 115
Pomógł: 13
Dołączył: 19.06.2011
Skąd: Ruda Śląska

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


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

Ten post edytował sobol6803 15.07.2012, 01:53:35


--------------------
  1. mysql_query("DROP DATABASE $_GET['dbname']");
Go to the top of the page
+Quote Post
CuteOne
post 15.07.2012, 02:06:51
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  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
Go to the top of the page
+Quote Post
sobol6803
post 15.07.2012, 02:34:40
Post #3





Grupa: Zarejestrowani
Postów: 115
Pomógł: 13
Dołączył: 19.06.2011
Skąd: Ruda Śląska

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


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.

Ten post edytował sobol6803 15.07.2012, 02:53:07


--------------------
  1. mysql_query("DROP DATABASE $_GET['dbname']");
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: 13.06.2025 - 08:34