Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Problem z wyświetleniem
davsi79
post 10.12.2011, 22:48:38
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 6.11.2009

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


Mam pewien problem i nie wiem jak go rozwiklać. Mam dwie tabele ZADANIA i WYKONANE_ZADANIA przeszukuje sobie w bazie czy zadanie na jednej z trzech zmian w danym dniu było już wykonane jeżeli nie to wyświetla je a jak było wykonane to juz go nie wyświetli. Problem polega na tym że w każdym dniu dwa razy występuje 3 zmiana ( od 0:00 do 7:00 i od 23:00 do 23:59 ) i nie wiem jak rozdzielic te 2 trzecie zmiany.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
timon27
post 10.12.2011, 23:17:58
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


Łoł, stary nie wiem czy tyle wypiłem, czy na trzeźwo też nie da się ciebie zrozumieć, ale proszę: napisz to co chciałeś powiedzieć jeszcze raz ze znakami interpunkcyjnymi z orzeczeniami.
Go to the top of the page
+Quote Post
davsi79
post 11.12.2011, 00:06:02
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 6.11.2009

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


Dwie tabele:

Tabela A : ZADANIA

Tabela B : WYKONANE_ZADANIA

$zmiana1 : 6:00 - 14:00
$zmiana2 : 14:00 - 22:00
$zmiana3 : 22:00 - 6:00

Sprawdzam czy zadanie z Tabeli A z numerem ID widnieje w dzisiejszym dniu na danej $zmianie w Tabeli B, jeżeli nie to wyświetla je. W tym problem że $zmiana3 występuje w pomiędzy 22:00 a 6:00 czyli sa dwie daty i nie wiem jak to ominąć ?
Go to the top of the page
+Quote Post
Niktoś
post 11.12.2011, 00:09:40
Post #4





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


To jest w bazie danych?Jak tak to zainteresuj się warunkiem between.
Go to the top of the page
+Quote Post
davsi79
post 11.12.2011, 00:14:49
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 6.11.2009

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


Tak to jest w bazie. Czy mógłbyś mnie troche nakierowac bo nie wiem jak miałaby wyglądać konstrukcja takiego zapytania
Go to the top of the page
+Quote Post
lukesh
post 11.12.2011, 00:21:41
Post #6





Grupa: Zarejestrowani
Postów: 113
Pomógł: 14
Dołączył: 25.08.2006

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


Nie do końca rozumiem, o co chodzi, ALE...

Być może po prostu uznaj, że jeśli zmiana trzecia pracuje od 22.00 11 grudnia do 6.00 12 grudnia, to cały czas mamy 11 grudnia i zadania przypisz do wykonania 11 grudnia?

W zmiennej $today ustaw dzisiejszą datę. Jeśli jest jeszcze przed 6 rano, to od dzisiejszej daty odejmij jeden dzień, dzięku czemu otrzymasz datę z poprzedniego dnia.

  1. if(date("G") <6){
  2. $today = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-1, date("y")));
  3. }else{
  4. $today = date("Y-m-d");
  5. }


A następnie wyszukaj zadania w tabeli.

Ten post edytował lukesh 11.12.2011, 00:22:50


--------------------
Edumemo.pl - Nauka Języków Obcych
Go to the top of the page
+Quote Post
Niktoś
post 11.12.2011, 00:26:53
Post #7





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


To będzie coś na ten wzór:
  1. SELECT d.Zadanie FROM TabelaA p INNER JOIN TabelaB d ON p.IDZadania=d.IDZadania WHERE Zadanie BETWEEN 22:00 AND 6:00


ale w ogóle ciężko cokolwiek dla Ciebie sklicić,musiałbyś podać dokładną strukturę swoich tabel.

Ten post edytował Niktoś 11.12.2011, 00:35:38
Go to the top of the page
+Quote Post
davsi79
post 11.12.2011, 00:36:21
Post #8





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 6.11.2009

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


Ok dzięki takie coś powinno zadziałać

  1. CREATE TABLE `wykonane_zadania` (
  2. `id_wyk_zadania` int(20) NOT NULL AUTO_INCREMENT,
  3. `id_zadania` int(20) NOT NULL,
  4. `kto` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  5. `kiedy` date NOT NULL,
  6. PRIMARY KEY (`id_wyk_zadania`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;




  1. CREATE TABLE `zadania` (
  2. `id_zadania` int(20) NOT NULL AUTO_INCREMENT,
  3. `zadanie` varchar(60) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  4. `op_zadania` varchar(100) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  5. `zmiana` tinyint(2) NOT NULL,
  6. PRIMARY KEY (`id_zadania`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=13 ;


Go to the top of the page
+Quote Post
lukesh
post 11.12.2011, 00:47:13
Post #9





Grupa: Zarejestrowani
Postów: 113
Pomógł: 14
Dołączył: 25.08.2006

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


Cytat(Niktoś @ 11.12.2011, 00:26:53 ) *
To będzie coś na ten wzór:
  1. SELECT d.Zadanie FROM TabelaA p INNER JOIN TabelaB d ON p.IDZadania=d.IDZadania WHERE Zadanie BETWEEN 22:00 AND 6:00


ale w ogóle ciężko cokolwiek dla Ciebie sklicić,musiałbyś podać dokładną strukturę swoich tabel.


To rozwiązanie chyba za bardzo nie pasuje... W tabeli jest pole DATE, dlatego nie będzie można wyszukać po godzinie.

Jak napisałem wcześniej - wystarczy określić, jaki mamy dzień, a konkretniej, w jakim dniu pracę rozpoczęła dana zmiana. I do tego dnia powinny być też zapisane zadania.

Wydaje mi się równiez, że kolumna "kiedy" powinna być w tabeli "zadania".


--------------------
Edumemo.pl - Nauka Języków Obcych
Go to the top of the page
+Quote Post
Niktoś
post 11.12.2011, 01:01:38
Post #10





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Nie za bardzo wiem co chcesz konkretnie wyciągnąć z tabeli tak więc wyciągne tobie większość przydatnych informacji:
  1. $wczoraj = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-1, date("y")));
  2. $dzisiaj= date("Y-m-d");

  1. SELECT p.Zadanie,p.op_zadania,d.kto,d.zmiana FROM zadania p INNER JOIN wykonane_zadania d ON p.id_zadania=d.id_zadania WHERE d.kiedy BETWEEN $wczoraj AND $dzisiaj;


Niewiem czy format daty zgadza się z tym z sql'a-mógłbyś jescze podać jak Tobie się data zapisuje w sql?
Ech, późno już raczej będę leciał do łóżka:)
Myślę że da rady to zrobić sql'em.

Ten post edytował Niktoś 11.12.2011, 01:08:06
Go to the top of the page
+Quote Post
davsi79
post 11.12.2011, 01:28:24
Post #11





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 6.11.2009

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


Widać mam jeszcze spore braki bo nie umię sobie w tym poradzić :/
Go to the top of the page
+Quote Post
Niktoś
post 11.12.2011, 01:40:43
Post #12





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Tak wskrócie:
p -ta literaka to jest jedna tabelka
d-ta literka to jest druga tabelka
Te literki przypisujesz do różnych tabel ,ot tak:
zadania p INNER JOIN wykonane_zadania d

Inner join złacza ze sobą tabeli teraz twoja tabelka zadania będzie nazywała się p, tabelka wykonane_zadania będzie nazywała się d
do kolumn teraz odwołujesz się poprzez literki:

SELECT p.Zadanie,p.op_zadania,d.kto,d.zmiana


p.Zadanie-to kolumna Zadanie z tabeli zadania - patrz na literke p.

d.kto-to kolumna kto z tabelki wykonane_zadania -patrz na literke d.
Aby odwołać się do kolumn z różnych tabel używamy innej literki.
Taki mini tutorialik.
Go to the top of the page
+Quote Post
davsi79
post 11.12.2011, 01:57:13
Post #13





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 6.11.2009

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


wielkie dzieki za cierpliwość
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:20