NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Zoradenie tabulky podla volby uzivatela

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Peter Schoeller:9.3.2016 11:59

Ahojte a prosim o radu. Dostal som za ulohu vytvorit jednoduchu stranku. Som zaciatocnik v php programovani.
Hladal som na tejto stranke tutorial, ale nic vhodne som nenasiel.
Podla tejto linky http://www.itnetwork.cz/…tecniky-uvod som si vytvoril databazu mien a narodenin kolegov. Databaza mySQL je naplnena a budem ju doplnat a menit len ja. Uzivatelia chcu vidiet len vysledky a chcu mat moznost rozneho radenia a zobrazovania.
Jednotlive stlpce tabulky maju nazvy "meno", "priezvisko" a "narodeniny". Prvy stlpec je "id" a nie je viditelny vo vysledku.
Chcem poprosit o radu, ako vytvorit php stranku, kde uzivatel by si zadefinoval, ze chce mat vo vysledku tabulku zoradenu napriklad abecedne podla "meno", alebo "priezvisko", alebo "narodeniny".
Tie narodeniny by nemali byt zobrazene od najmladsieho po najstarsieho kolegu, ale kto bude mat najblizsie narodeniny. Vysledok by bola zobrazena komplet zoradena tabulka (nieco podobne, ako sa da zoradit v Exceli)
2. cast otazky - napadla ma moznost, ci nie je mozne na stranke zobrazit aj nasledujucu vetu:
Za xxx dni bude mat yy-te narodeniny priezvisko a meno.
Kedze sme stredne velka firma, a narodeniny v jeden den maju viaceri, tak vo vysledku by sa zobrazili vsetci, co v ten den maju sviatok.
Dakujem za pomoc.

 
Odpovědět
9.3.2016 11:59
Avatar
shaman
Člen
Avatar
shaman:10.3.2016 13:04

V prvom rade budes potrebovat nejake linky nad tabulkou v html. Napr.

Zorad podla:
<a href="stranka.php?sort=name" >mena</a>
<a href="stranka.php?sort=surname" >priezviska</a>
<a href="stranka.php?sort=birthday" >narodenin</a>

Tieto linky ti budu posielat parameter sort ku php scriptu. Potom v php scripte das podmienku kde budes pripravovat myslq dotazy podla parametra. Zhruba takto:

<?php
// ziskaj sort parameter, defaultna hodnota je name.
$sort = (isset($_GET['sort']) ? $_GET['sort'] : "name";


if ($sort = "name") {
        $query = "SELECT *, TIMESTAMPDIFF(YEAR,narodeniny,CURDATE()) AS vek FROM tabulka ORDER BY meno ASC";
} elseif($sort = "surname") {
        $query = "SELECT *, TIMESTAMPDIFF(YEAR,narodeniny,CURDATE()) AS vek FROM tabulka ORDER BY priezvisko ASC";
} else {
        $query = "SELECT *, TIMESTAMPDIFF(YEAR,narodeniny,CURDATE()) AS vek FROM tabulka ORDER BY vek ASC";
}

K tvojej druhej otazke, zobrazit taku vetu vies, udaje si vytiahnes asi takto

$query = "SELECT *, datediff(CURDATE(), narodeniny) AS dniDoNarodenin, TIMESTAMPDIFF(YEAR,narodeniny,CURDATE()) AS vek FROM tabulka ORDER BY dniDoNarodenin ASC"
// spust query a uloz si ich do pola.

foreach($riadok as $zamestnanec) {
        echo "Za $zamestnanec['dniDoNarodenin'] dni bude mat ".$zamestnanec['vek']+1."-te narodeniny $zamestnanec['meno'] $zamestnanec['priezvisko']";
        }

PS: Ak mas v tabulke pole narodeniny ako datum (1992-12-12) tak pouzi CURDATE(). Ak pouzivas timestamp (2014-11-22 12:45:34) pouzi timestampdiff(NOW(), narodeniny)

Nahoru Odpovědět
10.3.2016 13:04
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.