Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie SQL
Forum PHP.pl > Forum > Bazy danych > MySQL
one_eddie
Mam 2 tabele i problem ze sformulowaniem zapytania aby otrzymac poprawne wyniki.
Bede wdzieczny za jakakolwiek pomoc w napisaniu zapytania.

Kod
Tabela_hist:
+----+----------+-------+-------+-------+
| id | osoba_id | el_id | data1 | data2 |
+----+----------+-------+-------+-------+


Kod
Tabela_el:
+----+-------+------+
| id | nazwa | info |
+----+-------+------+


Teraz chcialbym wyszykac wszystki wpisy dotyczace np osoby o id=1 i otrzymac nastepujace naglowki:
Kod
+-------+-----------+---------+-------------------+
| el_id | el_nazwa | el_info | data2-data1 (dni) |
+-------+----------+---------+-------------------+


Kombinowalem i probowalem pisac cos w tym stylu:
  1. SELECT Tabela_hist.el_id, (IN_DAYS(Tabela_hist.data2)-IN_DAYS(Tabela_hist.data1)) AS roznica_dat
  2. FROM Tabela_hist WHERE Tabela_hist.osoba_id=1


Ale jak widac za bardzo mi nie wyszlo.
Nie za bardzo wiem jak wlaczyc kolumny z Tabela_el?
nospor
  1. SELECT h.el_id,e.nazwa, e.info, (IN_DAYS(h.data2)-IN_DAYS(h.data1)) AS roznica_dat
  2. FROM Tabela_hist h, Tabela_el e
  3. WHERE h.osoba_id=1 AND e.id = h.el_id
one_eddie
Wielkie dzieki o to mi chodzilo.

Ale mam jeszcze jedno pytanie dlaczego wywala mi blad przy IN_DAYS? mam mysql 3.23.47 czy w tej wersji jest w/w funkcja byla juz zaimplementowana.

jakim zapytaniem mozna sprawdzic jakie funkcje sa dostepne w zainstalowanym serwerze mysql?
nospor
zamin in _days na TO_DAYS(date)
one_eddie
Cytat(nospor @ 2005-07-04 13:25:27)
zamin in _days na TO_DAYS(date)

Wszystko fajnie tyle ze roznice np dat '19/05/2005' - '18/05/2005' = 365 questionmark.gif

Prawdopodobnie uzywam blednego formatu daty.

Sciagam mysql-a 4.1 wtedy bede mogl skorzystac z funkcji DATEDIFF, moze ona pokaze poprawny wynik i wkoncu STR_TO_DATE ktora rozpozna moj format daty.

// edit: Napisalem zapytanie ale cos jest z nim nie tak, probowalem poprawiac ale mi nie wychodzi

  1. SELECT h.el_id,e.nazwa, e.info, DATEDIFF(STR_TO_DATE(h.data2,'%d/%m/%Y'), STR_TO_DATE(h.data1,'%d/%m/%Y')) AS roznica_dat
  2.  
  3. FROM Tabela_hist h, Tabela_el e
  4. WHERE h.osoba_id=1 AND e.id = h.el_id
  5. ORDER BY h.date1


Wywala mi:
Cytat
#1064 - 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 '( STR_TO_DATE( h . date2 , '%d/%m/%Y' ) , STR_TO_DATE( h


dlaczego? jesli usune datediff jest ok. kiedy sprawdzam samo datediff podaje poprawne wyniki. Mam teraz mysqla 4.1.12a-nt

// edit 2:
Problem rozwiazany. Prez czysty przypadek napisze to co zrobilem bo moze ktos podobnie jak ja odchodzil od zmyslow z uczuciem ze sie na tym nie zna, kiedy kolejny raz probowalem cos poprawic i nie wyszlo biggrin.gif

Mam apache 2+php 4.3+mysqla 4.1.12+phpmyadmin 2.6.3. Caly klopot przez phpma kiedy zapuszczalem mu, pokazana wyzej zapytanie wywalal blad, ale kiedy to samo zapytanie uruchamialem w "Mysql command line interpreter", wszysto bylo ok.

Malo nie wybuchlem jak to zobaczylem :X
A tak na powaznie to stracilem lekko zaufanie do phpmya. Od tej pory wszystko testowac bede na MysqlCLI.

Skrypt zaopatrzyny w to zapytanie takze dzialala ok. biggrin.gif
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.