Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie wizążące rekordy w pary
Unises
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 6.02.2006

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


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ć.

Ten post edytował Unises 6.06.2007, 08:46:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
SongoQ
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


  1. SELECT * FROM tabela t1, tabela t2
  2. WHERE t1.NrPrac = t2.NrPrac AND t1.we_wy != t2.we_wy


--------------------
Go to the top of the page
+Quote Post
Unises
post
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 6.02.2006

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Unises
post
Post #5





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 6.02.2006

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


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

Ten post edytował Unises 11.06.2007, 09:25:25
Go to the top of the page
+Quote Post
SongoQ
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Nie wiem czy da sie tak zrobic. Najprosciej i najszybciej jest napisac funkcyjke do tego.


--------------------
Go to the top of the page
+Quote Post
Unises
post
Post #7





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 6.02.2006

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


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)
Go to the top of the page
+Quote Post
SongoQ
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


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.


--------------------
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 - 07:29