Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Zapytanie left join
Forum PHP.pl > Forum > Przedszkole
kuba_pilach
Witam,
mam takie zapytanie mysql:
  1. // zapytanie o komputery
  2. $komputery = mysql_query('select * from komputery');
  3.  
  4. // zapytanie o oprogramowanie
  5. $oprogramowanie = mysql_query('select * from oprogramowanie');
  6.  
  7. // zapytanie o komputery i oprogramowanie\
  8. $kompopo = mysql_query('select k.id, k.komputer, k.proc, k.takt, k.ram, k.nazwa_firmy, k.lokalizacja, k.mac_adress, u.user, k.system, k.system, k.cd_key, d.nazwa, o.mo_nazwa, o.mo_key, k.nr_faktury, k.data_zakupu, k.dostawca, k.ip from komputery as k left join oprogramowanie as o left join dzialy as d left join users as u on komputery.oprogramowanie=oprogramowanie.id and komputery.id_dzial=dzialy.id and komputery.id_user=users.id') or print mysql_error();


I wyskakuje mi błąd:
Kod
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1


Może mi ktoś powiedzieć, gdzie zrobiłem błąd?

EDIT:
Już wiem co mam źle. tongue.gif Ale mam kolejny błąd, gdy zapytanie przestawiłem na :
  1. // zapytanie o komputery i oprogramowanie\
  2. $kompopo = mysql_query('select k.id, k.komputer, k.proc, k.takt, k.ram, k.nazwa_firmy, k.lokalizacja, k.mac_adress, u.user, k.system, k.system, k.cd_key, d.dzial, o.mo_nazwa, o.mo_key, k.nr_faktury, k.data_zakupu, k.dostawca, k.ip from komputery as k left join oprogramowanie as o on komputery.oprogramowanie=oprogramowanie.id left join dzialy as d on komputery.oprogramowanie=oprogramowanie.id left join users as u on komputery.id_dzial=dzialy.id and komputery.id_user=users.id') or print mysql_error();
wyskakuje błąd:
Kod
Unknown column 'komputery.oprogramowanie' in 'on clause'
IceManSpy
No dostałeś błąd i...? Przetłumaczyć?
Nieznana kolumna 'komputery.oprogramowanie' w klauzuli 'on'.
kuba_pilach
To wiem. Ale nie bardzo wiem, co to jest ta klauzula. I czy moje zapytanie za pomocą left join to dobry pomysł.
potreb
Wybór pól dla komputerów - k.*, resztę możesz pojedyncze pola wybrać. Ogólnie jeżeli masz złożone zapytanie, to możesz np do komputerów wstawiać user id, name, login. I nie pobierac ponownie left joinem z bazy. Takie dane możesz zserializować i zapisać do bazy.
kuba_pilach
ale niby te dwa pola się zgadzają. Mają tą samą wartość. Jaki może być inny problem?
Mi chodzi, by połączyć 4 tabele, by wpisywało odpowiednie rekordy, na warunkach połączenia, które dzięki left join powinny się połączyć.

Próbowałem także zrobić bez left join:
  1. $kompopo = mysql_query('select k.oprogramowanie, k.id, k.komputer, k.proc, k.takt, k.ram, k.nazwa_firmy, k.lokalizacja, k.mac_adress, u.user, k.system, k.system, k.cd_key, d.dzial, o.id, o.mo_nazwa, o.mo_key, k.nr_faktury, k.data_zakupu, k.dostawca, k.ip from komputery as k, oprogramowanie as o, dzialy as d, users as u') or print mysql_error();


Ale tym razem nic nie wyświetliło, a jestem pewny, że rekordy są.

Odświeżam... Czy naprawdę nikt nie wie co jest nie tak?questionmark.gif
peter13135
daj strukturę bazy (create table dla każdej tabeli i trochę przykładowych danych) może wtedy ktoś z nas coś by pomombinował
kuba_pilach
Oto export sql:
  1. CREATE TABLE IF NOT EXISTS `dzialy` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `dzial` varchar(100) NOT NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
  6.  
  7. --
  8. -- Zrzut danych tabeli `dzialy`
  9. --
  10.  
  11. INSERT INTO `dzialy` (`id`, `dzial`) VALUES
  12. (1, 'marketing');
  13.  
  14. -- --------------------------------------------------------
  15.  
  16. --
  17. -- Struktura tabeli dla `komputery`
  18. --
  19.  
  20. CREATE TABLE IF NOT EXISTS `komputery` (
  21. `id` int(11) NOT NULL AUTO_INCREMENT,
  22. `komputer` varchar(100) NOT NULL,
  23. `typ_komputera` varchar(100) NOT NULL,
  24. `proc` varchar(100) NOT NULL,
  25. `takt` varchar(100) NOT NULL,
  26. `ram` varchar(100) NOT NULL,
  27. `nazwa_firmy` varchar(100) NOT NULL,
  28. `lokalizacja` int(10) NOT NULL,
  29. `ip` int(11) NOT NULL,
  30. `id_user` int(11) NOT NULL,
  31. `system` varchar(100) NOT NULL,
  32. `cd_key` varchar(100) NOT NULL,
  33. `id_dzial` int(11) NOT NULL,
  34. `mac_adress` varchar(100) NOT NULL,
  35. `oprogramowanie` int(11) NOT NULL,
  36. `nr_faktury` varchar(100) NOT NULL,
  37. `data_zakupu` date NOT NULL,
  38. `dostawca` varchar(100) NOT NULL,
  39. PRIMARY KEY (`id`)
  40. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
  41.  
  42. --
  43. -- Zrzut danych tabeli `komputery`
  44. --
  45.  
  46. INSERT INTO `komputery` (`id`, `komputer`, `typ_komputera`, `proc`, `takt`, `ram`, `nazwa_firmy`, `lokalizacja`, `ip`, `id_user`, `system`, `cd_key`, `id_dzial`, `mac_adress`, `oprogramowanie`, `nr_faktury`, `data_zakupu`, `dostawca`) VALUES
  47. (1, 'Komp1', 'Stacjonarny', 'Intel Core 2 Duo', '2533', '1991', 'hp', 0, 1, 1, 'Windows XP Pro', 'QQDQW-FD9D2-YR72X-9K7BJ-DF9MD', 1, '00-0F-EA-40-01-4D', 1, '14/11/2009/FA', '0000-00-00', 'XLE');
  48.  
  49. -- --------------------------------------------------------
  50.  
  51. --
  52. -- Struktura tabeli dla `oprogramowanie`
  53. --
  54.  
  55. CREATE TABLE IF NOT EXISTS `oprogramowanie` (
  56. `id` int(11) NOT NULL AUTO_INCREMENT,
  57. `mo_nazwa` varchar(100) NOT NULL,
  58. `mo_key` varchar(100) NOT NULL,
  59. `id_komputera` int(11) NOT NULL,
  60. `typ` varchar(100) NOT NULL,
  61. `mo_nr_faktury` varchar(100) NOT NULL,
  62. `mo_data_zakupu` date NOT NULL,
  63. `mo_dostawca` varchar(100) NOT NULL,
  64. PRIMARY KEY (`id`)
  65. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
  66.  
  67. --
  68. -- Zrzut danych tabeli `oprogramowanie`
  69. --
  70.  
  71. INSERT INTO `oprogramowanie` (`id`, `mo_nazwa`, `mo_key`, `id_komputera`, `typ`, `mo_nr_faktury`, `mo_data_zakupu`, `mo_dostawca`) VALUES
  72. (1, 'Microsoft Office 2007 upg', 'JR9VJ-236WY-BX7GK-4T67C-XVWYY', 0, 'box', '14/11/2009/FA', '0000-00-00', 'xle');
  73.  
  74. -- --------------------------------------------------------
  75.  
  76. --
  77. -- Struktura tabeli dla `users`
  78. --
  79.  
  80. CREATE TABLE IF NOT EXISTS `users` (
  81. `id` int(11) NOT NULL AUTO_INCREMENT,
  82. `user` varchar(100) NOT NULL,
  83. `haslo` varchar(100) NOT NULL DEFAULT '207023ccb44feb4d7dadca005ce29a64',
  84. `rank` int(11) NOT NULL DEFAULT '0',
  85. PRIMARY KEY (`id`),
  86. UNIQUE KEY `user` (`user`)
  87. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
  88.  
  89. --
  90. -- Zrzut danych tabeli `users`
  91. --
  92.  
  93. INSERT INTO `users` (`id`, `user`, `haslo`, `rank`) VALUES
  94. (3, 'Ela Miska', '207023ccb44feb4d7dadca005ce29a64', 0);


I jak? Odświeżam...

Dobra, to drugie zadziałało. Wystarczyło dać zamiast: mysql_fetch_row , mysql_fetch_assoc smile.gif
Dzięki wszystkim za pomoc!
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.