Logika s časy | SQL+PHP – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Logika s časy | SQL+PHP – PHP – Fórum – Programujte.comLogika s časy | SQL+PHP – PHP – Fórum – Programujte.com

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

Vlákno bylo úspěšně vloženo.
Pokud sám přijdeš na řešení, nezapomeň ho sem přidat!
Ralis0
Newbie
30. 3. 2019   #1
-
0
-

Dobrý den, 

prosím, mám problém s vytvořením logiky. Situace je taková:

mám tabulku Objednavky s atributy ID,cislo_objednavky,ridic,datum,cas

do této tabulky posílám data s jednoduchého formuláře pomocí PHP.

Potřeboval bych vytvořit logiku takovou, aby když zvolím datum, např. 1.4.2019 a přidělím mu čas, např. 8:00, tak se pak (po použití tohoto času) už v nabídce tento čas pro tohle konkrétní datum(den) nenabídne. Prostě aby nešly zvolit v jeden den dva stejné časy :-) ..viz.příloha

Klidně bych to řešil i přes nějakou pomocnou tabulku, ale nenapadá mě nějaký rozumný způsob, jak to ověřovat..

Děkuji moc.

Připojen obrázek.

Připojen obrázek.

Nahlásit jako SPAM
IP: 2a00:1028:919a:5eb6:f0f7:fca4:f16:1677...–
Kit+14
Guru
30. 3. 2019   #2
-
+1
-
Zajímavé

#1 Ralis
Dal bych přednost tomu, aby se zobrazoval i obsazený čas kvůli rovnoměrnosti časové osy. Samozřejmě obsazený čas vyznačit.

Pokud bys trval na původním záměru, tak můžeš použít operátor MINUS a od tabulky s provozní dobou odečíst tabulku s obsazenými časy.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ralis0
Newbie
30. 3. 2019   #3
-
0
-

#2 Kit

Zdravim :) , určitě, to je skvělá připomínka, já právě nevím, jestli si udělat ještě pomocnou tabulku - nějaké počítadlo pouze pro ty časy a nebo to udělat nějak ,,elegantněji" ? 

Nahlásit jako SPAM
IP: 2a00:1028:919a:5eb6:f0f7:fca4:f16:1677...–
Kit+14
Guru
30. 3. 2019   #4
-
0
-

#3 Ralis
S tou pomocnou tabulkou to bude mnohem jednodušší. Pokud se v budoucnu změní provozní doba, jen upravíš tabulku. Tabulka může být denní, týdenní podle potřeby. Také ji můžeš mít jako virtuální - jen ve formě části SELECTu.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ralis0
Newbie
30. 3. 2019   #5
-
0
-

#4 Kit
jasně, prakticky to mám teď .. fixně napsané v html

no jako klidně označit nějak, že ty časy byly už obsazeny... ale jak na to? :/

<div class="form-group">
                <label for="CAS_VYKLADKY">Čas vykládky:</label>
                <select required class="form-control" id="CAS_VYKLADKY" name="CAS_VYKLADKY">
                    <option value=""></option>
                    <option value="07:00:00">07:00:00</option>
                    <option value="08:00:00">08:00:00</option>
                    <option value="09:00:00">09:00:00</option>
                    <option value="10:00:00">10:00:00</option>
                    <option value="11:00:00">11:00:00</option>
                    <option value="12:00:00">12:00:00</option>
                    <option value="13:00:00">13:00:00</option>
                    <option value="14:00:00">14:00:00</option>
                    <option value="15:00:00">15:00:00</option>
                    <option value="16:00:00">16:00:00</option>
                </select>
            </div>
Nahlásit jako SPAM
IP: 2a00:1028:919a:5eb6:f0f7:fca4:f16:1677...–
Kit+14
Guru
30. 3. 2019   #6
-
0
-

#5 Ralis
Měl jsem na mysli SELECT v MySQL.

V HTML můžeš použít atribut disable. Můžeš ho aktualizovat přes AJAX.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ralis0
Newbie
30. 3. 2019   #7
-
0
-

#6 Kit
aha super ! spíše já přemýšlím nad tou logikou jako takovou , jak případně udělat tu druhou tabulku - pomocnou.

Potřeboval bych jen ,,nakoupnout", třeba jen nějaký nákres :)

Děkuji moc

Nahlásit jako SPAM
IP: 2a00:1028:919a:5eb6:f0f7:fca4:f16:1677...–
MilanL+1
Věrný člen
1. 4. 2019   #8
-
+1
-
Zajímavé

#7 Ralis
Cest k výsledku je vícero a každý by to asi řešil jinak.

U toho tvého HTML by nejspíš stačilo po zadání datumu poslat datum do scriptu na server, kterej ti zpátky pošle jen obsazené časy a ty pak pomocí JS (nejlépe AJAXu)  použiješ pro doplnění atributu disabled k daným časům.

No já bych šel přes pomocnou tabulku se seznamem časů. (případně i datum a čas - lze tam pak plánovat přestávky, výpadky, jiný časový režim apod , např den XY od 10 do 13 výpadek Elektřiny)

na tabulku jen s časy pak

select casy.cas, objednavka, ridic

from casy left join Objednavky

where casy.cas=objednavky.cas and datum=$Datum

order by casy.cas

z toho pak v php udelat cyklus na vygenerování option položek pro select, když v záznamu není řidič je to volný termín, když je řidič bud přeskočíš čas, nebo nastavíš attribut disabled a k času zárověn můžeš hodit i info na co je čas rezervován Obj+řidič

Ber to jen jako navedení, sepisoval jsme to celkem narychlo můžou tam být chyby.

Nahlásit jako SPAM
IP: 91.139.9.–
Ralis0
Newbie
1. 4. 2019   #9
-
0
-

#8 MilanL
Super, moc děkuji !! přesně tohle jsem potřeboval, dnes k večeru vyzkouším :-) díky moc

Nahlásit jako SPAM
IP: 78.45.207.–
Ralis0
Newbie
1. 4. 2019   #10
-
0
-

#8 MilanL
tak jsem nakonec udělal mimo číselník 

table Ciselnik 

ID_CAS 

termin

např.: ID_CAS: 2     termin: 8:00:00

propojeno s tabulkou Objednavky

ID | Objednavka | Ridic | Datum | Cas

kde čas je hodnota z tabulky Ciselnik ID_CAS

 tenhle kod mi vrací hodnoty právě obsazených časů pro určité datum, které vyberu .. potřeboval bych to nějak invertovat a prakticky hotovo

Připojen obrázek.

prosím, nějaký ,,poslední" nápad? :)

if (isset($_POST['potvrdit_datum'])) {
    $datum_objednavky = $_POST['datum_objednavky'];

    require_once("connector.php");
    echo "<br>";

    $sql = "SELECT * FROM Objednavky LEFT JOIN Ciselnik ON Objednavky.cas=Ciselnik.ID_CAS WHERE Objednavky.datum='$datum_objednavky' AND Ciselnik.termin NOT IN ()";

    $result = mysqli_query($conn, $sql);

    if (mysqli_num_rows($result) > 0) {
        // output data of each row
        while ($row = mysqli_fetch_assoc($result)) {

            echo "<option value='" . $row['cas'] . "'\>" . $row['termin'] . "</option>";

        }
        echo "</select><br><div class=\"alert alert-success\" role=\"alert\">Byly nalezeny záznamy pro datum: <strong> " . $datum_objednavky . "<strong></div>";
    } else { echo "</select>";
        echo "<br><div class=\"alert alert-danger\" role=\"alert\">Žádné záznamy pro datum <strong>".$datum_objednavky."</strong></div>";
Nahlásit jako SPAM
IP: 78.45.207.–
MilanL+1
Věrný člen
2. 4. 2019   #11
-
0
-

#10 Ralis

v tom SELECTu je třeba prohodit ty tabulky From Ciselnik left join Objednávky

From - bere vše dle podmínek, left join bere to co je propojené.

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Věrný člen
2. 4. 2019   #12
-
0
-

#11 MilanL
a to "AND NOT IN()" bych vyhodil,

Nahlásit jako SPAM
IP: 91.139.9.–
Ralis0
Newbie
2. 4. 2019   #13
-
0
-

#11 MilanL

 ..tak jsem to propojil a dělá to úplně to stejné..

stále to vypisuje pouze obsazené časy, potřeboval bych vypisovat pouze ty neobsazené :)

nešlo by to třeba nějak ošetřit na výstupu AJAX s atributem ,,disabled", už to tady lidé navrhovali, ale vůbec nevím, jak na to .. přeci to nemůže být tak těžké :)

Děkuji

Připojen obrázek.

$sql = "SELECT * FROM Ciselnik LEFT JOIN Objednavky ON Ciselnik.ID_CAS=Objednavky.cas WHERE Objednavky.datum='$datum_objednavky'";
    $result = mysqli_query($conn, $sql);

    if (mysqli_num_rows($result) > 0) {
        // output data of each row
        while ($row = mysqli_fetch_assoc($result)) {

            echo "<option value='" . $row['cas'] . "'\>" . $row['termin'] . "</option>";

        }
Nahlásit jako SPAM
IP: 78.45.207.–
MilanL+1
Věrný člen
2. 4. 2019   #14
-
+1
-
Zajímavé

hm to dělá ta podmínka, chtělo by to tu část Objednávky hodit do sub selectu

$sql = "SELECT Termin FROM Ciselnik MINUS SELECT Termin FROM Ciselnik, Objednavky WHERE  Ciselnik.ID_CAS=Objednavky.cas AND Objednavky.datum='$datum_objednavky'";

Nahlásit jako SPAM
IP: 91.139.9.–
Ralis0
Newbie
2. 4. 2019   #15
-
0
-

#14 MilanL

 tak jsem to tam upravil a nic :( nevydá to žádný záznam. Jestli @MilanL (je vidět, že máš dobré nápady..) , tak ti klidně poskytnu údaje na hosting ,kdybys měl chviličku, asi by to pro tebe byla brnkačka na pár minutek...moc by mi to pomohlo, už se s tím pářu třetí den a vymýšlím kraviny jak to obejít :D

$sql = "SELECT termin FROM Ciselnik MINUS SELECT termin FROM Ciselnik, Objednavky WHERE  Ciselnik.ID_CAS=Objednavky.cas AND Objednavky.datum='$datum_objednavky'";
Nahlásit jako SPAM
IP: 78.45.207.–
MilanL+1
Věrný člen
2. 4. 2019   #16
-
0
-

#15 Ralis
tak konečně jsem se k tomu dostal a po chvíli trápení se syntaxí v myAdmin jsem se dobral k tomuhle 

SELECT *
FROM `casy`
LEFT JOIN (
SELECT *
FROM `Objednavky`
WHERE `Datum` = "2019-4-1"
)o ON `termin` = o.Cas


 id 	termin 	ID 	Cislo 	Ridic 	Datum 	Cas
1 	07:00:00 	2 	12645	Milan	2019-04-01 	07:00:00
2 	08:00:00 	NULL	NULL	NULL	NULL	NULL
3 	09:00:00 	NULL	NULL	NULL	NULL	NULL
4 	10:00:00 	NULL	NULL	NULL	NULL	NULL
5 	11:00:00 	NULL	NULL	NULL	NULL	NULL

v tabulce časy jsou jen ty termíny dal jsem tam pro test jen 7-11h, a v tabulse objednávek jsem měl 3 různé časy v různých dnech.

Ten sub SELECT v závorce je tam kvůli té datumové podmínce, aby se ta podmínka neprojevila v tom propojení s tabulkou časů, ale jen pro tu pravou stranu.

S tím už si poradíš ne?

Nahlásit jako SPAM
IP: 185.112.167.–
Ralis0
Newbie
2. 4. 2019   #17
-
0
-

#16 MilanL
Děkuji moc 

tak už jsem to dal dohromady :) 

$sql = "SELECT ID_CAS, termin FROM Ciselnik WHERE ID_CAS NOT IN (SELECT cas FROM Objednavky WHERE datum='$datum_objednavky')";

Děkuji moc za všechny rady!!!!

Nahlásit jako SPAM
IP: 78.45.207.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 25 hostů

Podobná vlákna

MultiUpload PHP a SQL — založil sALIERI

Kombinace PHP a MS SQL — založil polonium

Sql dotaz v PHP — založil Brambor

PHP SQL > CKeditor (4.6.2) — založil Arcam

Propojení PHP a MS SQL — založil Cheeester

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý