Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie wizążące rekordy w pary
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
Unises
Mam tabele o takich polach:



|Dodot| NrPrac| we_wy|

2007-06-05 01:53:49|2|0
2007-06-05 04:56:39|6|0
2007-06-05 04:56:57|3|0
2007-06-05 04:58:24|4|0
2007-06-05 05:05:19|5|0
2007-06-05 05:07:40|1|0
2007-06-05 14:53:49|6|1
2007-06-05 14:56:39|2|1
2007-06-05 14:56:57|3|1
2007-06-05 14:58:24|1|1
2007-06-05 15:05:19|5|1
2007-06-05 15:07:40|4|1


Teraz chciałbym napisać coś co by i pożeniło to w całośc czyli:

| NrPrac| Dodot | Dodot |

2|2007-06-05 01:53:49|2007-06-05 14:56:39
6|2007-06-05 04:56:39|2007-06-05 14:53:49
3|2007-06-05 04:56:57|2007-06-05 14:56:57
4|2007-06-05 04:58:24|2007-06-05 15:07:40
1|2007-06-05 05:07:40|2007-06-05 14:58:24


W accesie robie to tak ze rozbijam ta tabele glowna na dwa zapytania ktore roznią sie werukiem na polu we_wy w jednym zapytaniu jest 0 w drugim 1, nastepnie buduje trzecie zapytanko i uzywam ich jako zrodeł łacząc relacją po NrPrac, W relacji zaznaczam uwzgleniam wszystkie z pierwszego zapytania a z drugie go tylko te ktore są równe / dzieki temu widze wejscie z pustym polem wyjscia jesli ono nie nastąpiło

Jak to napisać w SQL w jednym ciągu by mozna było to potem wysłać do bazy z pomocą PHP
Wiem że mozna używać jakiś zapytań z podzapytaniem, ale nie wiem jak je zbudować i czy mssql bedzie potrafił je prawidłowo zinterpretować.
SongoQ
  1. SELECT * FROM tabela t1, tabela t2
  2. WHERE t1.NrPrac = t2.NrPrac AND t1.we_wy != t2.we_wy
Unises
Chyba mnie nie zrozumiałeś ja mam tylko jedną tabele z danymi (którą w acccesie rozbiłem na dwa zapytania i połączyłem trzecim by osiągnąć cel), a ty w rozwiązaniu podajesz dwie.
nospor
Ja przepraszam ze sie wtrace, ale:
Cytat
a ty w rozwiązaniu podajesz dwie.
A gdzie SongoQ podal ci tam dwie tabele?
Jedna sie nazywa tabela i druga sie nazywa tabela. Widzisz udezajace podobienstwo nazw? A to ze nadal im aliasy t1 i t2 to juz byla koniecznosc. Poczytaj cos najlepiej o aliasach.
Unises
Dziekuje!, ale jest cos jeszcze

Witam , raz jeszcze! okazało się ze temat nadal jest aktualny, wyniki zwracane przez to zapytanie są zadawalajace do momentu , gdy NrPrac wystepuje raz na dobe: ma 1 wejscie i 1 wyjscie, a ja ogranicze date za dany dzien,natomiast gdy jeszcze raz wejdzie i wyjdzie (co czesto sie zdarza oddelegowany na 2 godziny po pączki ;-) ) czyli w bazie pojawi sie kolejne dwa rekordy z tym samym NrPrac robi sie kaszanka (zamiast dwóch par, zwraca zwielokrotnione rekordy we wszystkich mozliwych kombinacjach) Co zresztą jest zrozumiałe i wynika z relacji miedzy tabelami. Ja natomist chce wyswietlic wszystkie pary, nawet jesli jeden prac. bedzie wchodził i wychodził 8 razy i nawet na przstrzeni zmiany doby.
Kombinowałem na boku jak zwykle w Access i jedyne co zrobiłem to zapytanie krzyzowe które pokazuje mi własciwe pary ale tylko wartosci maksymalne czyli ostatnie wejscie i wyjscie i to nawet nie wjenym wierszu, tylko na ukos angrysmiley.gif .

Jak wyswietlic wszystko czyli weszło np dwóch z czego jeden dwa razy wchodził i wychodził , co daje nam 6 par (z tego dwie dla jednego pracownika?)
Nie mam wpływu na projekt tabel i bazy.

Przeczytałem posty o wyswietlaniu najbliższych i jakos mnie nie olsniło sadsmiley02.gif
SongoQ
Nie wiem czy da sie tak zrobic. Najprosciej i najszybciej jest napisac funkcyjke do tego.
Unises
Rozumiem ze piszac zdrobniale funkcyjke chcesz mnie pocieszyc ze to niby takie łatwe tongue.gif ,

W zarysie wyobrazam sobie to tak:Tworzymy jakąs chyba tablice do ktorej wrzucamy tylko rekordy
Dodot <=2007-06-10 00:00:00 and >= 2007-06-11 00:00:00

i znajdujemy np NrPrac = 2 pobieramy date i sprawdzamy ww=0 (wszedł)znajdujemy kolejny NrPrac =2 i patrzymy czy data jest wieksza i czy rekord ma ww=1. czyli wyszedł i czy jednoczesnie jesli isteje/badz nie kolejny z ww=0 czy data jest mniejsza itd, jesli nie ma juz rekordu z nr parac=2
to bierzemy nastepny NrPrac i tak cały zestaw dla n prcowników

i tak sie to pętli do konca (dna) utworzonej tablicy czy czegos tam.
Wszystko Super tylko brakuje mi jezyka zeby to napisac w php (bo jestem jasnozielony)
SongoQ
No tak przy pomocy tablic. Albo mozesz jeszcze inaczej do tego podejsc. Tworzysz tabele tak jak by taka posrednia gdzie zapisujesz masz id | wej_id | wyj_id Wtedy nic nie musisz oblicza wszystko wynika z prostej relacji.
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.