Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z zapytaniem przy uzyciem Left Join do polaczenia kilku tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
MakS
Mam problem z zapytaniem

  1. SELECT p.id, p.imie, p.nazwisko, t.min, t.co, k.id, k.nazwa, s.mecze, s.mecze_rez, s.min, s.bramki, s.zolte, s.czerwone
  2. FROM lfc_terminarz_mecz_live t, lfc_kraj k, lfc_postacie_profil p, lfc_terminarz_lfc m
  3. JOIN lfc_postacie_stat s ON p.id = s.postac_id AND s.sezon = m.sezon_id
  4. WHERE t.mecz_id = '5080' AND t.postac_id = p.id AND p.narodowosc = k.id AND m.id = '5080' AND (
  5. t.co = 'bramka' OR t.co = 'karny_strzelony' OR t.co = 'karny_niestrzelony' OR t.co = 'samoboj_lfc' OR t.co = 'zolta' OR t.co = 'czerwona' OR t.co = 'zmiana'
  6. )
  7. ORDER BY t.min DESC LIMIT 1


Blad: #1054 - Unknown column 'p.id' in 'on clause'

I nie wiem dlaczego jest zle, na kompie mi chodzi wszystko poprawnie, a na serwerze nie.
Wczesniej mialem podobny problem i poprostu zmienilem kolejnosc tabel w "FROM", ale tutaj gdy mam ON porownywanie do 2 komurek z 2 roznych tabel to juz nie wiem jak to poprawic.
MatheW
Unknown column 'p.id' - nieznana kolumna sprawdź czy masz na pewno dobrą strukturę.
MakS
Strukture mam dobra,
moze dam wyglad 3 tabel o ktore tutaj sie rozchodzi:
  1. CREATE TABLE `lfc_postacie_stat` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `postac_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
  4. `sezon` int(10) UNSIGNED NOT NULL DEFAULT '0',
  5. `klub` int(11) NOT NULL DEFAULT '0',
  6. `mecze` int(3) UNSIGNED NOT NULL DEFAULT '0',
  7. `mecze_rez` int(3) NOT NULL DEFAULT '0',
  8. `min` int(4) NOT NULL DEFAULT '0',
  9. `bramki` int(3) NOT NULL DEFAULT '0',
  10. `zolte` int(3) NOT NULL DEFAULT '0',
  11. `czerwone` int(3) NOT NULL DEFAULT '0',
  12. PRIMARY KEY (`id`),
  13. KEY `sezon` (`sezon`),
  14. KEY `postac_id` (`postac_id`),
  15. KEY `klub` (`klub`)
  16. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
  17.  
  18. CREATE TABLE `lfc_postacie_profil` (
  19. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  20. `nr` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  21. `imie` varchar(60) character SET latin2 NOT NULL DEFAULT '',
  22. `nazwisko` varchar(60) character SET latin2 NOT NULL DEFAULT '',
  23. `data_ur` date NOT NULL DEFAULT '0000-00-00',
  24. PRIMARY KEY (`id`)
  25. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
  26.  
  27. CREATE TABLE `lfc_terminarz_lfc` (
  28. `id` int(11) NOT NULL AUTO_INCREMENT,
  29. `sezon_id` int(11) NOT NULL DEFAULT '0',
  30. `rozgrywki_id` tinyint(4) NOT NULL DEFAULT '0',
  31. `data` date NOT NULL DEFAULT '0000-00-00',
  32. `godz` time NOT NULL DEFAULT '00:00:00',
  33. `rozegrany` int(1) NOT NULL DEFAULT '0',
  34. UNIQUE KEY `id` (`id`)
  35. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
jarrod
jednak nie podales struktury wszystkich tabel..
MakS
Cytat(jarrod @ 30.10.2006, 23:35:06 ) *
jednak nie podales struktury wszystkich tabel..


Ale blad jest z p.id czyli tabela fc_postacie_profil.

Ale moge oczywiscie podac i reszte:
  1. CREATE TABLE `lfc_terminarz_mecz_live2` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `mecz_id` int(11) NOT NULL DEFAULT '0',
  4. `min` tinyint(3) NOT NULL DEFAULT '0',
  5. `postac_id` int(11) NOT NULL DEFAULT '0',
  6. `przeciwnik_postac_id` int(11) NOT NULL DEFAULT '0',
  7. `samoboj_kto` varchar(30) collate latin1_general_ci NOT NULL DEFAULT '',
  8. `zmiana_za` int(11) NOT NULL DEFAULT '0',
  9. `przeciwnik_zmiana_za` int(11) NOT NULL DEFAULT '0',
  10. `skarny_kto` varchar(60) character SET latin2 NOT NULL DEFAULT '',
  11. `sk_lfc` tinyint(2) NOT NULL DEFAULT '0',
  12. `sk_prz` tinyint(2) NOT NULL DEFAULT '0',
  13. `co` enum('bramka','karny_strzelony','karny_niestrzelony','zolta','czerwona','samoboj','samoboj_lfc','zmiana','seriak_lfc_strzelony','seriak_prz_strzelony','seriak_lfc_niestrzelony','seriak_prz_niestrzelony','przeciwnik_bramka','przeciwnik_karny_strzelony','przeciwnik_karny_niestrzelony','przeciwnik_zolta','przeciwnik_czerwona','przeciwnik_zmiana','nic') collate latin1_general_ci NOT NULL DEFAULT 'nic',
  14. `bramki_lfc` int(2) NOT NULL DEFAULT '0',
  15. `bramki_przeciwnik` int(2) NOT NULL DEFAULT '0',
  16. `akcja` int(11) NOT NULL DEFAULT '0',
  17. `opis` text character SET latin2 NOT NULL,
  18. PRIMARY KEY (`id`),
  19. KEY `mecz_id` (`mecz_id`,`postac_id`),
  20. KEY `postac_id` (`postac_id`),
  21. KEY `zmiana_za` (`zmiana_za`),
  22. KEY `przeciwnik_postac_id` (`przeciwnik_postac_id`)
  23. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ;
  24.  
  25. CREATE TABLE `lfc_kraj` (
  26. `id` int(11) NOT NULL AUTO_INCREMENT,
  27. `nazwa` varchar(60) character SET latin2 NOT NULL DEFAULT '',
  28. PRIMARY KEY (`id`)
  29. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
death from beyond
Wydaje mi się, że problem wynika z prawidłowości, którą zauważyłem, tzn.:

Przy joinie, kolumny, po których joinujesz (czyli znajdujące się w ON) zostają wyrzucone z końcowego rezultatu. Dlatego twój błąd moim zdaniem dotyczy p.id, które umiejscowione jest zaraz za poleceniem SELECT. na twoim miejscu spróbowałbym odwołać się do kolumny s.id, albo w ogóle pokombinować w inny sposób.

Nie wiem też ile prawdy jest w moich dociekaniach winksmiley.jpg
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.