Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
| Autor | Správa |
|---|
Registrovaný: 30.11.10 Prihlásený: 28.12.15 Príspevky: 6 Témy: 2 | 2 |
Ahojte, robim SQL dotaz na to, aby mi vypisalo aku hodinu aktualne vyucuje ucitel.(napr. ak bude 8 hodin rano, tak mi zobrazi ze ten a ten ucitel vyucuje napr. slovencinu) Mam v databazi tabulku rozvrh a tam mam ulozene data o zaciatku, konci hodin a pod. Tieto hodiny su ulozene v datetime. A mam problem, ako to prepojit s php a zobrazit? Mam to momentálne takto: Kód: $stmt3 = $db->prepare("SELECT substring(lessons.start_time, 11,6), substring(lessons.end_time,11,6), FROM lessons INNER JOIN lectors ... WHERE lessons.start_time >= (' ".date('Y-m-d H:i:s')." ') AND lessons.end_time <= (' ".date('Y-m-d H:i:s')." ') AND lectors.lector_id=:id ORDER BY ... "); $stmt3->bindValue(":id", intval($_GET["id"])); $stmt3->execute(); Ak dam namiesto date normalne casove rozmedzie, tak mi vypise ten predmet v tom case, ale v tomto pripade vypise len Array(). Zobrazujem to pomocou latte sablony, v ktorej som si dala podmienku, ze ak je pole prazdne, tak vypise, ze ucitel nikde neuci, ale ani tuto spravu mi neche zobrazit.
|
|
Registrovaný: 01.05.05 Príspevky: 13557 Témy: 1483 | 1483 Bydlisko: Bratislava |
Kód: $stmt3 = $stmt3->fetchAll(PDO::FETCH_ASSOC); //vrati pole vsetkych vysledkov, ktore ti ten sql select najde var_dump($stmt3); //si mozes pozriet co sa v tom poli nachadza predtym ako si budes cez latte formatovat vystup podla tvojich poziadaviek
_________________ Streacom DA2 | SilverStone Titanium SX800-LTI 800W | ASRock X299E-ITX/ac | Intel Core i9-9980XE & be quiet! Dark Rock TF | Kingston HyperX Impact 64 GB DDR4 2666 MHz | NVIDIA Titan RTX 24 GB | Intel SSD Optane 905P 480 GB NVMe U.2 & Intel SSD 750 1,2 TB NVMe U.2 & Intel SSD 660p 2 TB NVMe M.2 & Seagate BackUp Plus Portable 56 TB USB | 55" 4K OLED Dell Alienware AW5520QF | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech G603 | Logitech F710 | Harman Kardon Sabre SB 35 & Sennheiser RS 175 | Microsoft Windows 11 Enterprise | APC Back-UPS BE-850 VA | Lenovo ThinkPad X1 Carbon | SilverStone ML05B Milo | Corsair SF600 SFX 600W | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 & NOCTUA NH-L12S | Kingston HyperX Savage 32 GB DDR4 2400 MHz | NVIDIA GeForce GT 710 1 GB | Intel SSD Optane Memory 32 GB NVMe M.2 & Intel SSD 730 240 GB SATA & Samsung SSD 860 1 TB | Ubuntu 24.04 LTS | Dell Wyse 3040 | Intel Atom x5-Z8350 | 2 GB DDR3 1600 MHz | 16 GB eMMC | 24" EIZO FlexScan EV2451 | Alpine Linux + XFCE4 |
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 30.11.10 Prihlásený: 28.12.15 Príspevky: 6 Témy: 2 | 2 |
Between som nasla, ze porovnava len v 1 stlpci, ja porovnavam medzi 2 stlpcami. Tie data su ulozene vo formate 0000-00-00 08:45:00 napr. a var_dump mi vypise array (size=0) empty ... ... comu nerozumiem, lebo ked nahradim 'Y-m-d H:i:s' za 0000-00-00 08:00:00 a 0000-00-00 08:45:00 tak mi normalne vypise, aky predmet sa vyucuje v tu dobu... A teraz vecer, ked sa uz nic nevyucuje by to malo vypisat, ze ucitel momentalne nevyucuje, .. ale ani to nevypise:/
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Pozri sa na to ešte raz, pretože BETWEEN je presne na to, aby si neurobila hlúpu chybu v porovnaní. Takže to prepíš na between a potom porozmýšľaj, prečo to nešlo. Kód: WHERE tenDatum BETWEEN lessons.start_time AND lessons.end_time
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 30.11.10 Prihlásený: 28.12.15 Príspevky: 6 Témy: 2 | 2 |
Okay, a ako sa to prosím prepaja s php? Lebo toto sql mi vypisuje Array().. Nerozumiem, kde robim chybu. Inak rozmyslam, v tomto pripade je potrebne pouzit substring?
SELECT lessons.start_time, lessons.end_time FROM lessons INNER JOIN lectors ... WHERE '".date('Y-m-d H:i:s')."' BETWEEN lessons.start_time AND lessons.end_time
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Nie, nie je potrebný substring, ak ti nevadí, že dostaneš celý datum a čas.
A ako sa to prepája s php napísal JanoF. Musíš použiť FetchAll.
A ak ti to stále nepôjde, pošli sem tvoj kód.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 30.11.10 Prihlásený: 28.12.15 Príspevky: 6 Témy: 2 | 2 |
ja to skusam v db a data sa mi zobrazia bez podmienky, ale s pomienkou uz nie, nerozumiem preco Kód: $stmt3 = $db->prepare(" SELECT l.schoolday, l.start_time, l.end_time, t.lectorsurname, sg.class_id, c.grade, s.subjectname FROM lessons l INNER JOIN lectors t ON l.lector_id=t.lector_id INNER JOIN studentgroups sg ON l.studentgroup_id=sg.studentgroup_id INNER JOIN classes c ON sg.class_id=c.class_id INNER JOIN subjects s ON l.subject_id=s.subject_id WHERE l.start_time <= CURTIME() AND l.end_time >= CURTIME() AND t.lector_id=:id ORDER By c.grade, l.schoolday, l.start_time"); $stmt3->bindValue(":id", intval($_GET["id"])); $stmt3->execute(); $data=$stmt3->fetchAll(); print_r($data);
$tplVars["vyucovanie"] = $stmt3->fetchAll(); a latte Kód: <tr> <th> Aktuálne vyučuje: </th> </tr> {foreach $vyucovanie as $aktual} {if !empty($aktual['grade'])} <tr> <td>{$aktual['grade']} </td> </tr> {/if} {if ($aktual['grade']) == NULL} <tr> <td> <span> Učiteľ momentálne nevyučuje </span></td></tr> {/if} {/foreach} Myslim, ze nevadi, ze to bude zobracovane s datumom, ja chcem zobrazt len rocnik v ktorom uci aktualne ucitel
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 |
Používaš tam dva krát po sebe fetchAll. To by si nemala, ten prvý fetchAll akoby "vyčerpá" všetky dáta a druhý už nevráti nič. Miesto toho druhého fetchu priraď jednoducho $data, ktoré máš už vytiahnuté pred tým.
Ďalej problém môže byť aj v dátach. Máš tam nejak veľa joinov. Neviem, či ti ich reálne treba - ak chceš zistiť LEN to, ČI učiteľ vyučuje, tak asi nie. Skús teda vyhádzať všetky nepotrebné joiny (tie posledné tri) a skús to spustiť tak. Ak ti to pôjde, tak problém bude v dátach a niečo sa ti tam v tých inner jinoch správne neprepojí. Tak môžeš použiť left joiny a skúmať, kde je chyba.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 30.11.10 Prihlásený: 28.12.15 Príspevky: 6 Témy: 2 | 2 |
Ja ten prvy join mazem, ten mam na to, aby mi zobrazilo, co tam je  Ta tabulka je poprepajana, preto tolko joinov, ja chcem vypis ak vyucuje tak rocnik a predmet. Nerozumiem, preco mi tie data vypise bez tej podmienky, a s tou podmienkou vrati nula riadkov. Skusam aj left join, ale vypisuje tie iste riadky jak s inner:/
|
|
Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
|