Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Relacyjne zapytanie, 2 pola do 1 tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
piterek83
Witam serdecznie,
zapewne sprawa wyda się błaha jednak mam z nią problem.
Mam w tabeli car_ads 2 pola: `country` i `country_register`, są one powiązane z polem `id` w tabeli countries.
Potrzebuję pobrać wymienione pola w postaci nazwy kraju z którym jest powiązany `id` w tych polach.


Table: car_ads

id | country | country_register |
------------------------------------
1 | 2 | 1 |

Table: countries

id | name |
------------------|
1 | Polska |
2 | Dania |

Mój kod:

  1. <?php
  2. $query = mysql_query('SELECT c.id, c.country, c.country_register
  3. FROM car_ads as c
  4. LEFT JOIN countries as cnt
  5. ON c.country = cnt.id AND c.country_register = cnt.id
  6. WHERE c.id = 1');
  7. $q = mysql_fetch_assoc($query);
  8. ?>

<div style="clear:both;float:left;width:500px;height:200px">
<?php print_r($q); ?>
<p>Kraj pochodzenia: <?php echo $q['country'] ?></p>
<p>Kraj rejestracji: <?php echo $q['country_register'] ?></p>
</div>

print_r($q) oraz paragrafy w divie mi zwracają:

Array ( [id] => 21 [country] => 2 [country_register] => 1 )

Kraj pochodzenia: 2 <- tu powinno być: Dania
Kraj rejestracji: 1 <- tu powinno być: Polska

Proszę o pomoc smile.gif
trafas
W twoim zapytaniu powinieneś joinować tabelę z krajami dwa razy.
Raz po polu country i drugi raz po polu country_register:



  1. SELECT c.id, c.country, c.country_register
  2. FROM car_ads AS c
  3. LEFT JOIN countries AS cnt
  4. ON c.country = cnt.id
  5. LEFT JOIN countries AS cnt_reg
  6. ON c.country_register = cnt_reg.id
  7. WHERE c.id = 1


A jak chcesz wyciągnąć nazwy kraju, to w selkcie wyciągasz:
  1. SELECT c.id, cnt.name, cnt_reg.name
piterek83
Dzięki! Nakierowałeś mnie. Pełne rozwiązanie problemu:

  1. <?php
  2. $query = mysql_query('SELECT c.id, c.country, c.country_register, cnt.name AS pochodzenie, cnt_reg.name AS zarejestrowany
  3. FROM car_ads AS c
  4. LEFT JOIN countries AS cnt
  5. ON c.country = cnt.id
  6. LEFT JOIN countries AS cnt_reg
  7. ON c.country_register = cnt_reg.id
  8. WHERE c.id = 1');
  9. $q = mysql_fetch_assoc($query);
  10. echo $q['pochodzenie']; //kraj pochodzenia
  11. echo $q['zarejestrowany']; //kraj aktualnej rejestracji
  12. ?>
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.