Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql/PHP] LEFT OUTER JOIN i podwójne wyciaganie danych z tej samej tabeli
cytrysek
post
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 4.01.2008

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


Witam,
zrobiłem sobie takie zapytanie:
  1. SELECT DISTINCT p.prop_co_ad_id, p.prop_zaco_ad_id, ad.ad_title, ad2.ad_title
  2. FROM zam714_prop p
  3. JOIN zam714_user u ON (p.prop_user_do_id = 423 )
  4. JOIN zam714_ad a ON (a.ad_owner=u.user_id)
  5. LEFT OUTER JOIN zam714_ad ad ON(ad.ad_id=p.prop_zaco_ad_id)
  6. LEFT OUTER JOIN zam714_ad ad2 ON(ad2.ad_id=p.prop_co_ad_id)


wyświetla to co chce, ale pojawia się problem dalej, otóż jak widać w zapytaniu, wyciągam 2x tą samą tabelę: ad_title, tyle, że za każdym razem wg innego id:

Kod
   prop_zaco_ad_id    |    ad_title        |  prop_co_ad_id  |   ad_title            
       11           |            opis1      |      16       |          tytul1
       2             |           opis2       |      5         |         tytul2
       2             |          opis2        |     11         |       tytul3


i teraz robię pętle w PHP:

  1. <?php
  2. $i=0;
  3. while ($row_prop3 = mysql_fetch_array($prop3))
  4. {
  5. $lProp3[$i]["ad_title"]=$row_prop3["ad_title"];
  6. $i++;
  7. }
  8. ?>


ale pokazuje tylko 1 wartość tytuł, a w zapyatniu mam: ad.ad_title, ad2.ad_title

Czy jest to możliwe, aby wyciągnąc w 1 zapytaniu 2 różne tytuły, zależne od innego id ?
Jak to poprawnie zapętlić ?

Dzięki za pomoc.
PW
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Neeke
post
Post #2





Grupa: Zarejestrowani
Postów: 124
Pomógł: 16
Dołączył: 22.02.2007
Skąd: Warszawa

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


  1. SELECT DISTINCT p.prop_co_ad_id, p.prop_zaco_ad_id, ad.ad_title, ad2.ad_title AS tytul2
  2.  
  3. FROM zam714_prop p
  4. JOIN zam714_user u ON (p.prop_user_do_id = 423 )
  5. JOIN zam714_ad a ON (a.ad_owner=u.user_id)
  6. LEFT OUTER JOIN zam714_ad ad ON(ad.ad_id=p.prop_zaco_ad_id)
  7. LEFT OUTER JOIN zam714_ad ad2 ON(ad2.ad_id=p.prop_co_ad_id)


i uzycie :

[php]

Ten post edytował Neeke 18.01.2008, 20:46:54
Go to the top of the page
+Quote Post
cytrysek
post
Post #3





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 4.01.2008

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


Dzięki.
O to właśnie chodziło.

pzdr.
PW

No to jeszcze jedna kwestia:

Wyświetlam sobie dane wyciągnięte z poprzedniego zapytania w 2 komorkach tabeli:
Kod
tytul2 (2): faek (5)
tytul2 (2): łódka Bols (11)

...itd

a robie to tak:
  1. <?php
  2. $prop3=q($sql="select .....jak wyzej ");
  3. $i=0;
  4. while ($row_prop3 = mysql_fetch_array($prop3))
  5. {
  6. $lProp3[$i]["title_zaco_ad_id"]=$row_prop3["ad_title"];
  7. $lProp3[$i]["title_co_ad_id"]=$row_prop3["tytul2"];
  8.  
  9. $i++;
  10. }
  11. $tplMember->assign("prop_co",$lProp3);
  12. ?>


a ponieważ to SMARTY, to dalej:

  1. {section name=prop loop=$prop_co}
  2. <tr><td>
  3. {$prop_co[prop].title_co_ad_id} ({$prop_co[prop].propozycje_co_ad_id}): </td><td>
  4. {$prop_co[prop].title_zaco_ad_id} ({$prop_co[prop].propozycje_zaco_ad_id})
  5. <br></td></tr>
  6. {/section}



no dobra, a jak zrobić coś takiego:

Kod
tytul2 (2): faek (5)
                 łódka Bols (11)


czyli jeśli w pierwszej komórce id (w tym wypadku2) wystepuje wiecej niz 1 raz - to wyswietla sie on tylko raz, a w prawej komorce pozostale pasujace opisy pozostaja ?

pzdr.
PW
Go to the top of the page
+Quote Post
Neeke
post
Post #4





Grupa: Zarejestrowani
Postów: 124
Pomógł: 16
Dołączył: 22.02.2007
Skąd: Warszawa

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


niewiem czy dobrze zrozumialem i co do smartow to niestety nie znam sie na nich ale w zapytaniu masz mozliwosc na koncu dodania paru dodatkow takich jak GROUP BY np. ad2.ad_id moze oto ci chodzi GROUP BY jest stosowane do grupowania rekordów w bazie czyli jezeli masz np 3 rekrdy o tej samej dacie w tej samej tabeli mozesz je zgrupowac przez dodanie
np.
  1. $sql="select id from jakas_tabele where date=now() GROUP BY date ";

i wyswietli ci tylko jeden raz ta date
polecam troche manuala poczytac tam masz dokladnie opisane
Go to the top of the page
+Quote Post
cytrysek
post
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 4.01.2008

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


hm, raczej nie nie GROUP, bo ogranicza mi wyniki...

tutaj raczej szukam jakies rozwiazania do samej prezentacji wynikow zapytania.
No chyba, że kolejny select w pętli ?

Chodzi po prostu o to, żeby w smarty fragment, który odpowiada za lewą komórkę :
  1. <?php
  2. {$prop_co[prop].title_co_ad_id} ({$prop_co[prop].propozycje_co_ad_id})
  3. ?>


pokazwył tylko unikalne wyniki, pamiętając, że pętla działa również do prawej komórki, a tam powinny pojawić się wyniki zależne od parametru z lewej komórki, a wiec moze byc ich wiecej.
nie wiem czy to jasno przedstawiłem.

dzieki.
PW
Go to the top of the page
+Quote Post
Neeke
post
Post #6





Grupa: Zarejestrowani
Postów: 124
Pomógł: 16
Dołączył: 22.02.2007
Skąd: Warszawa

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


Tu zabardzo Ci niepomoge jednak. Ale ja bym probowal z tym dodatkowym selectem w petli ..

pozdr.
Go to the top of the page
+Quote Post
cytrysek
post
Post #7





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 4.01.2008

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


Zrobione.

Trochę prób i udało się.
W PHP:
wrzucilem 2 selecty ale niezalażne od siebie (niezagniezdzone)

a w smarty 2 pętle od tych 2 selectow zagnieżdzone
a w srodku prosty warunek:

  1. <?php
  2. .....
  3. {section name=prop1 loop=$prop1}
  4. <td>
  5.  
  6. .. lewa kolumna
  7.  
  8. </td>
  9.  
  10. <td>
  11.  {section name=prop2 loop=$prop2}
  12. {if $prop1[prop1].1_ad_id == $prop2[prop2].2_ad_id}
  13.  
  14. .... prawa kolumna
  15.  
  16. {/if}
  17. {/section}
  18. </td>
  19.  
  20. {/section}
  21. ?>



i hula guitar.gif

pzdr.
PW
Go to the top of the page
+Quote Post
mpawel007
post
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.02.2009

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


Dodaj alias przy wypisywaniu 1 tytulu
[code=sql]SELECT DISTINCT p.prop_co_ad_id, p.prop_zaco_ad_id, ad.ad_title as tytul, ad2.ad_title
from zam714_prop p
JOIN zam714_user u ON (p.prop_user_do_id = 423 )
JOIN zam714_ad a ON (a.ad_owner=u.user_id)
LEFT OUTER JOIN zam714_ad ad ON(ad.ad_id=p.prop_zaco_ad_id)
LEFT OUTER JOIN zam714_ad ad2 ON(ad2.ad_id=p.prop_co_ad_id)
[/code]
Wypisz tak:
Kod
<?php
<?php
$i=0;
while ($row_prop3 = mysql_fetch_array($prop3))
{
$lProp3[$i]["tytul"]=$row_prop3["ad_title"];
$i++;    
}
?>
?>



Dodaj alias przy wypisywaniu 1 tytulu
[code=sql]SELECT DISTINCT p.prop_co_ad_id, p.prop_zaco_ad_id, ad.ad_title as tytul, ad2.ad_title
from zam714_prop p
JOIN zam714_user u ON (p.prop_user_do_id = 423 )
JOIN zam714_ad a ON (a.ad_owner=u.user_id)
LEFT OUTER JOIN zam714_ad ad ON(ad.ad_id=p.prop_zaco_ad_id)
LEFT OUTER JOIN zam714_ad ad2 ON(ad2.ad_id=p.prop_co_ad_id)
[/code]
Wypisz tak:
Kod
<?php
<?php
$i=0;
while ($row_prop3 = mysql_fetch_array($prop3))
{
$lProp3[$i]["tytul"]=$row_prop3["ad_title"];
$i++;    
}
?>
?>

Nie wiem czy o to chodzilo ale mniej wiecej tak to zrozumiałem
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:04