Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Dane z dwóch różnych tabel
Forum PHP.pl > Forum > Przedszkole
brzanek
Witam wiem, że na forum jest mnóstwo podobnych tematów ale żaden z nich nie jest odpowiedni do mojego problemu.
Mam w bazie danych dwie tabele
gorzow i gorzow_t
W tabeli gorzow mam takie pola:
  1. CREATE TABLE `gorzow` (
  2. `id` int(11) NOT NULL,
  3. `nazwastacji` varchar(50) CHARACTER SET latin2 NOT NULL,
  4. `miasto` varchar(50) CHARACTER SET latin2 NOT NULL,
  5. `rok` varchar(20) CHARACTER SET latin2 NOT NULL,
  6. `miesiac` varchar(4) CHARACTER SET latin2 NOT NULL,
  7. `dzien` varchar(6) CHARACTER SET latin2 NOT NULL,
  8. `max_temp` float(6,1) NOT NULL,
  9. `b` varchar(20) CHARACTER SET latin2 NOT NULL,
  10. `min_temp` float(6,1) NOT NULL,
  11. `d` varchar(20) CHARACTER SET latin2 NOT NULL,
  12. `srednia_temp` float(6,1) NOT NULL
  13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


W tabeli gorzow_t mam takie pola
  1. CREATE TABLE `gorzow_t` (
  2. `id` int(11) NOT NULL,
  3. `kod_meteo` varchar(20) NOT NULL,
  4. `nazwa_stacji` varchar(20) NOT NULL,
  5. `rok` varchar(5) NOT NULL,
  6. `miesiac` varchar(5) NOT NULL,
  7. `dzien` varchar(5) NOT NULL,
  8. `srednie_dobowe_zachmurzenie` float(5,1) NOT NULL,
  9. `status_pomiaru_sdz` varchar(2) NOT NULL,
  10. `srednia_dobowa_predkosc_wiatru` float(5,1) NOT NULL,
  11. `status_pomiaru_sdpw` varchar(2) NOT NULL,
  12. `srednia_dobowa_temperatura` float(5,1) NOT NULL,
  13. `status_pomiaru_sdt` varchar(2) NOT NULL,
  14. `srednie_dobowe_cisnienie_pary_wodnej` float(5,1) NOT NULL,
  15. `status_pomiaru_sdcpw` varchar(2) NOT NULL,
  16. `srednia_dobowa_wilgotnosc` float(5,1) NOT NULL,
  17. `status_pomiaru_sdw` varchar(2) NOT NULL,
  18. `srednie_dobowe_cisnienie_poziom_stacji` float(5,1) NOT NULL,
  19. `status_pomiaru_sdcps` varchar(2) NOT NULL,
  20. `srednie_dobowe_cisnienie_poziom_morza` float(5,1) NOT NULL,
  21. `status_pomiaru_sdcpm` varchar(2) NOT NULL,
  22. `suma_opadu_dzien` float(5,1) NOT NULL,
  23. `status_pomiaru_sod` varchar(2) NOT NULL,
  24. `suma_opadu_noc` float(5,1) NOT NULL,
  25. `status_pomiaru_son` varchar(2) NOT NULL
  26. ) ENGINE=InnoDB DEFAULT CHARSET=latin2;


Wspólnymi polami jest rok, miesiac i dzień
Chcę wyciągnąć te wszystkie dane z dwóch tabel dla danego miesiąca w danym roku.
Daję takie zapytanie
  1. SELECT * FROM `gorzow`
  2. INNER JOIN `gorzow_t`
  3. ON `gorzow`.`nazwastacji` = `gorzow_t`.`kod_meteo`
  4. WHERE `rok` LIKE '1967' AND `miesiac` LIKE '05' ORDER BY `id` ASC

Chyli wywołuję dane z dwóch tabel gorzow i gorzow_t dla maja 1967 roku ale nic się nie dzieje.
Gdzie jest błąd?
kapslokk
Czy na pewno powinieneś łączyć po polach `gorzow`.`nazwastacji` i `gorzow_t`.`kod_meteo`??
Pyton_000
Mysql nie wie do którego pola rok i miesiąc odwołujesz się czy w tabeli gorzow czy gorzow_t.

`WHERE `gorzow_t`.`rok` LIKE '1967' AND `gorzow_t`.`miesiac` LIKE '05'`
brzanek
OK zrobiłem tak
  1. SELECT * FROM `gorzow`
  2. INNER JOIN `gorzow_t`
  3. ON `gorzow`.`nazwastacji` = `gorzow_t`.`kod_meteo`
  4. WHERE `gorzow`.`rok` LIKE '1967' AND `gorzow`.`miesiac` LIKE '05' ORDER BY `gorzow`.`id` ASC

Ale wyniki są tylko dla jednego dnia a powinny być dla całego miesiąca.

Cytat(kapslokk @ 19.04.2019, 08:41:59 ) *
Czy na pewno powinieneś łączyć po polach `gorzow`.`nazwastacji` i `gorzow_t`.`kod_meteo`??

No właśnie nie do końca jestem pewien czy to dobry pomysł. Ale po ID odpada bo nie zawsze może zgadzać się data. Zrobił bym po dacie rok, miesiąc i dzień ale niw wiem czy to wypali.
kapslokk
No to po czym łączysz jest kluczowe.

Wpisy z jednej tabeli w jakiś sposób odpowiadają wpisom z drugiej. Jeśli w Twoim przypadku jedyne co je łączy to rok, miesiąc i dzień to musisz po tym łączyć.
Może wrzuć przykład danych na których pracujesz?
brzanek
Zgadza się, ale jak dałem aby łączyło się po wspólnej dniu to dane są tylko z jednego dnia i powtarzają się. Tak samo jest w przypadku łączenia po nazwastacji i kod_meteo
kapslokk
W joinie powinieneś mieć rok, miesiąc i dzień - masz tylko dzień.
brzanek
Dałem tak
  1. SELECT * FROM `gorzow`
  2. INNER JOIN `gorzow_t`
  3. ON `gorzow`.`rok` AND `gorzow`.`miesiac` AND `gorzow`.`dzien` = `gorzow_t`.`rok` AND `gorzow_t`.`miesiac` AND `gorzow_t`.`dzien`
  4. WHERE `gorzow`.`rok` LIKE '1967' AND `gorzow`.`miesiac` LIKE '05' ORDER BY `gorzow`.`id` ASC

Uzyskałem pusty wynik.
Pyton_000
Bo bzdury napisałeś...

gorzow.dzien = gorzow_t.dzien AND ... itd.
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.