Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Jak poprawnie napisać zapytanie?
Forum PHP.pl > Forum > Przedszkole
Pite(R)
Witam.

Wykonuję sobie ćwiczenia z pewnego podręcznika do PHP i MySQL. Posiadam bazę danych o nazwie "moviesite". Posiada ona trzy tabele: movie, movietype i people, przy czym movietype jest w tym wypadku niepotrzebny.

movie:
Kod
+----------+---------------------+------------+------------+-----------------+----------------+
| movie_id | movie_name          | movie_type | movie_year | movie_leadactor | movie_director |
+----------+---------------------+------------+------------+-----------------+----------------+
|        1 | Bruce Wszechmogący  |          5 |       2003 |               1 |              2 |
|        2 | Życie biurowe       |          5 |       1999 |               5 |              6 |
|        3 | Wielki Kanion       |          2 |       1991 |               4 |              3 |
+----------+---------------------+------------+------------+-----------------+----------------+


people:
Kod
+-----------+-----------------+----------------+-------------------+
| people_id | people_fullname | people_isactor | people_isdirector |
+-----------+-----------------+----------------+-------------------+
|         1 | Jim Carrey      |              1 |                 0 |
|         2 | Tom Shaydac     |              0 |                 1 |
|         3 | Lawrence Kasdan |              0 |                 1 |
|         4 | Kevin Kline     |              1 |                 0 |
|         5 | Ron Livingston  |              1 |                 0 |
|         6 | Mike Judge      |              0 |                 1 |
+-----------+-----------------+----------------+-------------------+


Potrzebuję zapisać zapytanie, które "stworzy" taką (lub podobną) tabelkę:
Kod
+------------+-----------------+----------------+
| movie_name | movie_leadactor | movie_director |
+------------+-----------------+----------------+

Gdzie zamiast numerków pod movie_leadactor i movie_director pojawią się nazwiska z kolumny people_fullname. Niestety, nie mam już pomysłu, jak zapisać to zapytanie. Proszę o pomoc.

Pozdrawiam.
bastard13
Rozumiem, że:
Cytat
Potrzebuję zapisać zapytanie, które "stworzy" taką (lub podobną) tabelkę:

oznacza: zwróci mi taki wynik.
Pokaż swoje próby (ze stwierdzenia 'nie mam już pomysłów' wnioskuję, że były) to coś poradzimy na twój problem:)
Pite(R)
Cytat(bastard13 @ 25.09.2011, 00:50:19 ) *
Rozumiem, że:
oznacza: zwróci mi taki wynik.

Ano biggrin.gif
Cytat(bastard13 @ 25.09.2011, 00:50:19 ) *
Pokaż swoje próby (ze stwierdzenia 'nie mam już pomysłów' wnioskuję, że były) to coś poradzimy na twój problem:)

  1. SELECT movie_name, people_fullname
  2. FROM movie
  3. LEFT JOIN people
  4. ON (movie_leadactor = people_id
  5. OR movie_director = people_id)
  6. ORDER BY movie_name;

Kod
+---------------------+-----------------+
| movie_name          | people_fullname |
+---------------------+-----------------+
| Bruce Wszechmogący  | Jim Carrey      |
| Bruce Wszechmogący  | Tom Shaydac     |
| Wielki Kanion       | Lawrence Kasdan |
| Wielki Kanion       | Kevin Kline     |
| Życie biurowe       | Ron Livingston  |
| Życie biurowe       | Mike Judge      |
+---------------------+-----------------+


  1. SELECT movie_name, people_fullname
  2. FROM movie
  3. LEFT JOIN people
  4. ON movie_leadactor = people_id
  5. ORDER BY movie_name;

Kod
+---------------------+-----------------+
| movie_name          | people_fullname |
+---------------------+-----------------+
| Bruce Wszechmogący  | Jim Carrey      |
| Wielki Kanion       | Kevin Kline     |
| Życie biurowe       | Ron Livingston  |
+---------------------+-----------------+


  1. SELECT movie_name, movie_leadactor, movie_director
  2. FROM movie
  3. LEFT JOIN people
  4. ON (movie_leadactor = people_id
  5. OR movie_director = people_id)
  6. ORDER BY movie_name;

Kod
+---------------------+-----------------+----------------+
| movie_name          | movie_leadactor | movie_director |
+---------------------+-----------------+----------------+
| Bruce Wszechmogący  |               1 |              2 |
| Bruce Wszechmogący  |               1 |              2 |
| Wielki Kanion       |               4 |              3 |
| Wielki Kanion       |               4 |              3 |
| Życie biurowe       |               5 |              6 |
| Życie biurowe       |               5 |              6 |
+---------------------+-----------------+----------------+


Oto moje niezbyt udane próby.
bastard13
Powinno zadziałać:
  1. SELECT movie_name, p1.people_fullname AS leadactor, p2.people_fullname AS director
  2. FROM movie
  3. LEFT JOIN people AS p1
  4. ON movie_leadactor = people_id
  5. LEFT JOIN people AS p2
  6. ON movie_director = people_id
  7. ORDER BY movie_name;
Pite(R)
  1. SELECT movie_name, p1.people_fullname AS leadactor, p2.people_fullname AS director
  2. FROM movie
  3. LEFT JOIN people AS p1
  4. ON movie_leadactor = p1.people_id
  5. LEFT JOIN people AS p2
  6. ON movie_director = p2.people_id
  7. ORDER BY movie_name

people_id było niejednoznaczne, po poprawce poszło jak marzenie smile.gif
Wielkie dzięki!
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.