Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z wyświetleniem
Forum PHP.pl > Forum > Przedszkole
davsi79
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.
timon27
Ł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.
davsi79
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ąć ?
Niktoś
To jest w bazie danych?Jak tak to zainteresuj się warunkiem between.
davsi79
Tak to jest w bazie. Czy mógłbyś mnie troche nakierowac bo nie wiem jak miałaby wyglądać konstrukcja takiego zapytania
lukesh
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.
Niktoś
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.
davsi79
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 ;


lukesh
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".
Niktoś
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.
davsi79
Widać mam jeszcze spore braki bo nie umię sobie w tym poradzić :/
Niktoś
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.
davsi79
wielkie dzieki za cierpliwość
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.