Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: (Podwójny?) LEFT JOIN
Forum PHP.pl > Forum > Bazy danych > MySQL
chmiello96
Przedstawię przykładową bazę
  1. mysql> SELECT * FROM owoc;
  2. +---------+------------+
  3. | owoc_id | owoc_nazwa |
  4. +---------+------------+
  5. | 1 | Banan |
  6. | 2 | Jabłko |
  7. | 3 | Cytryna |
  8. | 4 | Ananas |
  9. | 5 | Gruszka |
  10. +---------+------------+
  11. 5 rows IN SET (0.00 sec)
  12.  
  13. mysql> SELECT * FROM ludzie;
  14. +-----------+-------------+
  15. | ludzie_id | ludzie_imie |
  16. +-----------+-------------+
  17. | 1 | Jan |
  18. | 2 | Jakub |
  19. | 3 | Józef |
  20. | 4 | Jonasz |
  21. | 5 | Jeremiasz |
  22. +-----------+-------------+
  23. 5 rows IN SET (0.00 sec)
  24.  
  25. mysql> SELECT * FROM przynaleznosc;
  26. +------------------+---------------------+--------------------+
  27. | przynaleznosc_id | przynaleznosc_osoba | przynaleznosc_owoc |
  28. +------------------+---------------------+--------------------+
  29. | 1 | 2 | 1 |
  30. | 2 | 4 | 5 |
  31. | 3 | 3 | 2 |
  32. +------------------+---------------------+--------------------+
  33. 3 rows IN SET (0.00 sec)


można wrzucić do siebie
  1. --
  2. -- Struktura tabeli dla `ludzie`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `ludzie` (
  6. `ludzie_id` int(11) NOT NULL AUTO_INCREMENT,
  7. `ludzie_imie` varchar(64) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  8. PRIMARY KEY (`ludzie_id`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
  10.  
  11. --
  12. -- Zrzut danych tabeli `ludzie`
  13. --
  14.  
  15. INSERT INTO `ludzie` (`ludzie_id`, `ludzie_imie`) VALUES
  16. (1, 'Jan'),
  17. (2, 'Jakub'),
  18. (3, 'Józef'),
  19. (4, 'Jonasz'),
  20. (5, 'Jeremiasz');
  21.  
  22. -- --------------------------------------------------------
  23.  
  24. --
  25. -- Struktura tabeli dla `owoc`
  26. --
  27.  
  28. CREATE TABLE IF NOT EXISTS `owoc` (
  29. `owoc_id` int(11) NOT NULL AUTO_INCREMENT,
  30. `owoc_nazwa` varchar(64) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  31. PRIMARY KEY (`owoc_id`)
  32. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
  33.  
  34. --
  35. -- Zrzut danych tabeli `owoc`
  36. --
  37.  
  38. INSERT INTO `owoc` (`owoc_id`, `owoc_nazwa`) VALUES
  39. (1, 'Banan'),
  40. (2, 'Jabłko'),
  41. (3, 'Cytryna'),
  42. (4, 'Ananas'),
  43. (5, 'Gruszka');
  44.  
  45. -- --------------------------------------------------------
  46.  
  47. --
  48. -- Struktura tabeli dla `przynaleznosc`
  49. --
  50.  
  51. CREATE TABLE IF NOT EXISTS `przynaleznosc` (
  52. `przynaleznosc_id` int(11) NOT NULL AUTO_INCREMENT,
  53. `przynaleznosc_osoba` int(11) NOT NULL,
  54. `przynaleznosc_owoc` int(11) NOT NULL,
  55. PRIMARY KEY (`przynaleznosc_id`)
  56. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
  57.  
  58. --
  59. -- Zrzut danych tabeli `przynaleznosc`
  60. --
  61.  
  62. INSERT INTO `przynaleznosc` (`przynaleznosc_id`, `przynaleznosc_osoba`, `przynaleznosc_owoc`) VALUES
  63. (1, 2, 1),
  64. (2, 4, 5),
  65. (3, 3, 2);


Chodzi mi o to, by zapytanie wyświetliło mi imiona wszystkich osób i jeżeli są w posiadaniu jakichś owoców, to żeby je także wyświetlić.
Przykład:
  1. +-----------+-------------+--------------------+------------+
  2. | ludzie_id | ludzie_imie | przynaleznosc_owoc | owoc_nazwa |
  3. +-----------+-------------+--------------------+------------+
  4. | 1 | Jan | NULL | NULL |
  5. +-----------+-------------+--------------------+------------+
  6. | 2 | Jakub | 1 | Banan |
  7. +-----------+-------------+--------------------+------------+
  8. | 3 | Józef | 2 | Jabłko |
  9. +-----------+-------------+--------------------+------------+
  10. | 4 | Jonasz | 5 | Gruszka |
  11. +-----------+-------------+--------------------+------------+
  12. | 5 | Jeremiasz | NULL | NULL |
  13. +-----------+-------------+--------------------+------------+


Za pomoc będę niezmiernie wdzięczny smile.gif
bpskiba
  1. SELECT ludzie_id,ludzie_imie,przynaleznosc_owoc,owoc_nazwa
  2. FROM ludzie
  3. LEFT JOIN przynaleznosc ON przynaleznosc_osoba=ludzie_id
  4. LEFT JOIN owoc ON owoc_id=przynaleznosc_owoc
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.