Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Znajdż, oblicz i podaj wynik. Można tak zrobić?
xeo
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 28.10.2005

Ostrzeżenie: (0%)
-----


Mam taką baze danych:

_wartosc____data_____czas_____dzien
____1____2005-01-02__2:00__poniedziałek
____5____2005-01-02__3:00__poniedziałek
____4____2005-01-02__4:00__poniedziałek
____1____2005-01-03__2:00__wtorek
____3____2005-01-03__3:00__wtorek

czy jest możliwość zastosować tylko SELECT oczywiście z FORM WHERE itp. żeby mi znalazło w wszystkie poniedziałki czy wartość o godzinie przykładowo 2:00 była wieksza od wartości tego dnia o godzinie 3:00 i tak żeby sprawdziło każdy poniedziałek w bazie i zapisało wynik do zmiennej $wynik, na przykład było 45 poniedziałków w których wartość o 2:00 była wieksza od wartosci o 3:00? I jescze jedna prośba jeżeli ktoś ma strone gdzie są wytłumaczone wszystkie możliwości SELECT chodzi mi o MAX MIN COUNT itp. to podajcie.
Dzięki
Pozdrawiam
Go to the top of the page
+Quote Post
Aztech
post
Post #2





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Primo: pisz całymi zdaniami bo tego się czytać nie da, pisz dokładniej!
Secundo: to wszystko jest wytłumaczone w MANUALU!
Tertio: zrobiłeś coś, napisałeś coś, czy czekasz aż ci podają na tacy?
Go to the top of the page
+Quote Post
xeo
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 28.10.2005

Ostrzeżenie: (0%)
-----


Cytat(Aztech @ 2005-11-21 19:15:19)
Tertio: zrobiłeś coś, napisałeś coś, czy czekasz aż ci podają na tacy?

A dlaczego by nie!!!!! Przecież po to są fora dyskusyjne żeby naprowadzić lub podać rozwiązanie, przecież logiczne jest że jak bym znał rozwiązania to bym nie pisał ten post.
Jest baza są kolumny wartosc, data, czas, dzien i chcę wyszukać ile było poniedzialków w których wynik w kolumny wartosc o 2:00 był wiekszy niż o 3:00 Nie wiem jeszcze w jaki sposób można to wytłumaczyć, myślę że nawet pierwsze tłumaczenie było czytelne.


Podam na dokładnym przykładzie, jeżeli cała baza wygląda tak:

_wartosc____data_____czas_____dzien
____9____2005-01-02__2:00__poniedziałek
____5____2005-01-02__3:00__poniedziałek
____4____2005-01-02__4:00__poniedziałek
____1____2005-01-03__2:00__wtorek
____3____2005-01-03__3:00__wtorek
____9____2005-01-06__2:00__poniedziałek
____1____2005-01-06__3:00__poniedziałek
____4____2005-01-06__4:00__poniedziałek
____1____2005-01-08__2:00__środa
____5____2005-01-08__3:00__środa
____4____2005-01-08__4:00__środa
____1____2005-01-11__2:00__poniedziałek
____6____2005-01-11__3:00__poniedziałek
____4____2005-01-11__4:00__poniedziałek

2005-01-02 to poniedziałek i wartość o 2:00 jest 9 więc jest większa od wartości o 3:00 która jest 5, 2005-01-06 wartość o 2:00 jest 9 więc jest większa od wartości o 3:00 która jest 1 , 2005-01-11 wartośc o 2:00 jest 1 więc jest mniejsza od wartości o 3:00 która jest 6. Wychodzi na to że mamy trzy poniedziałki w których dwa razy wartość o 2:00 była wieksza od wartości o 3:00 i raz gdzie wartość o 2:00 była mniejsza o 3:00, interesuja mnie tylko ile razy wartość była wieksza o 2:00 niż o 3:00 więc wynik który powinienem uzyskać to 2. Ja pobieram z bazy wszystkie poniedziałki które mają czas 2:00 i 3:00 i na zewnątrz to wszystko analizuje ale niestety to trwa bardzo długo i chcę to zrobić w samą baze danych ale nie wiem czy jest to możliwe.

Ten post edytował xeo 21.11.2005, 22:13:03
Go to the top of the page
+Quote Post
Aztech
post
Post #4





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Primo: Tak po to są fora aby zadawać pytania, ale warto pokazać, że coś już zrobiłeś!
Secundo: logiczne jest, że wyjaśnienie SELECT znajduje się w manualu
Tertio: Oto rozwiązanie:
Założyłem tabelę testową o strukturze takiej jak Twoja tylko dodałem pole ID, które jest kluczem prymalnym a wiec wyglada to tak:

ID | WARTOSC | DATA | TIME | DZIEN

UWAGA: pole TIME ma następujący wygląd zgodny z formatem TIME: hh:mm:ss

Należy złączyć tabelę z sobą samą więc raz ją nazywasz jako td1 a za drugim razem jako td2 (patrz: LEFT JOIN) potem masz polecenie ON, czyli względem czego złączyłeś, tutaj najważniejsza jest dala, bo chcesz porównywać ten jeden konkretnydzień.
Godzina ma byc druga więc: td1.czas = '02:00:00' analogicznie dla td2.czas = '03:00:00' no i wartosc w td1 (tam gdzie jest godzina 2) ma byc wieksza niz w td2 (tam gdzie jest godzina 3) więc logiczny warunek: td1.wartosc > td2.wartosc

Opcjonalnie możesz dodać warunek GROPU BY td1.ID gdyby okazało się że masz więcej niż jeden wpis z danej godziny.

Mam nadizeję, że to jest wystarczająco jasne

  1. SELECT td1.id, td1.wartosc, td1.DATA, td1.czas, td1.dzien, td2.id, td2.wartosc, td2.DATA, td2.czas, td2.dzien
  2. FROM testowa AS td1
  3. LEFT JOIN testowa AS td2 ON td1.DATA = td2.DATA
  4. WHERE td1.wartosc > td2.wartosc AND td1.czas = '02:00:00' AND td2.czas = '03:00:00'
  5. GROUP BY td1.id
Go to the top of the page
+Quote Post
xeo
post
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 28.10.2005

Ostrzeżenie: (0%)
-----


Pole ID mam po prostu go nie podałem. Wielkie dzięki za rozwiązanie no i oczywiście za link z manualem. smile.gif
Pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 16:44