21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
tozi
Profil
Ahojte, momentálne sa mi ukladajú záznamy pod ID 1,2,3,4,5 atď

Ako to zmeniť podľa roku na napr 20150001,20150002,20150010 atď?

Dá sa to?

Zatiaľ to vo výpise vyzerá takto:
<?php
$servername = "";
$username = "";
$password = "";
$dbname = "";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT id_tabulky, meno, email FROM tabulka";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id_tabulky"]. " | Meno: " . $row["meno"]. " | E-mail: " . $row["email"]. "&nbsp;" . "<a href='delete.php?cmd=delete&id_tabulky=".$row['id_tabulky']."'>Zmazať</a>". "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>
xROAL
Profil
So samostatným auto-incrementom niečo takéto asi nedosiahneš.
Šlo by na to ale využiť funkcie/procedúry v MySQL, ktoré by automaticky generovali ID v požadovanom tvare pre každý vložený záznam.

Rovnaký problém riešený na stackoverflow (v angličtine). V poslednej odpovedi je linknutý aj tutorial.
mimochodec
Profil
tozi:
Jestli potřebuješ číslo ve tvaru rok + číselná řada, radši si ho generuj nějakým jiným způsobem. Snaha zadávat ID zavání problémem.
Taps
Profil
tozi:
Je důležité si uvědomit, že pokud budeš využívat ID, tak v roce 2016 nebudeš schopen dosáhnout 20160001 (respk. generovat číselnou řadu od 1,2,3 atd)
tozi
Profil
Diky moc za rady.
Taps
Ano viem, to by som asi založil novú tabuľku pre další rok.
Taps
Profil
tozi:
Podle me neni optimalni zakladat novou tabulku kvuli novemu roku.
tozi
Profil
Taps:
Iný nápad? V php a db som začiatočník takže som rád za každú radu, poučenie.
Alphard
Profil
tozi [#7]:
Obecná rada, pro začátečníka není dynamické vytváření tabulek nikdy dobrý nápad.

Možné řešení pro MyISAM tabulky je třeba zde stackoverflow.com/a/7902514. Přestalo se mi líbit, viz [#9].
PS: Dal bych si pozor na hromadu jiných nápadů (kterých je plný internet) a pracují s funkcí max().

Taps:
v roce 2016 nebudeš schopen dosáhnout 20160001 (respk. generovat číselnou řadu od 1,2,3 atd)
Teoreticky to možné je, viz Změna hodnoty auto increment. V praxi by to znamenalo automaticky přesně na začátku nového roku (obecně začátku období) spustit servisní script, který to přenastaví. Je to možné, ale rizikové.
Alphard
Profil
Ještě doplnění, před řešením s max() jsem varoval kvůli tomu, že při smazání posledních záznamů recykluje dříve použitá id, to považuji za nepřijatelné. Bohužel jsem zjistil, že mnou výše odkázané řešení dělá to samé a ještě je omezené na MyISAM tabulky, takže se mi přestalo líbit.

1. Ale jsou situace, kdy z tabulky žádné záznamy nemažeme (můžeme jen nastavovat příznak smazání), pak to nevadí a šlo by k tomu přístoupit přes trigger.
sqlfiddle.com/#!2/a94bc/2

2. Řádky mazat můžeme, potom je třeba ukládat si informaci o posledním id, zřejmě do další tabulky. Jde to nějak takhle.
sqlfiddle.com/#!2/667bd/1

Doplnění k doplnění: Ty příklady jsou dost osekané, určitě bych patřičné sloupce ještě opatřil unikátním indexem sqlfiddle.com/#!2/83d561/1.
tozi
Profil
Veľmi pekne ďakujem. Aj za príklady. Idem sa s tým "hrať".

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0