Autor Zpráva
Sobky
Profil
Zdravím, potreboval by som takú malú pomoc. Chcem si spraviť číselný zoznam v mysql databáze. A chcem aby sa to zapisovalo postupne podla čísliel (1,2,3,4, a nie 1,3,4,2) Aj keď to tam nebudem zadávať postupne.
Joker
Profil
Sobky:
A chcem aby sa to zapisovalo postupne podla čísliel (1,2,3,4, a nie 1,3,4,2) Aj keď to tam nebudem zadávať postupne.
Co?
Dobrá, zkusím z toho odhadnout něco, co dává smysl.

Mohlo by to směřovat na ukládání číselné posloupnosti v MySQL, tj. první záznam dostane 1, druhý 2, atd. K tomu slouží vlastnost AUTO_INCREMENT.

Druhá možnost je, že v databázi je uložená nějaká posloupnost čísel a má se vypsat tak, aby byla popořadě. K tomu slouží klauzule ORDER BY při výběru dat.
Sobky
Profil
Ani jedno z toho mi nepomohlo..
Spravím taký postup čo chcem.

1. Vytvorím si na webe takú "apku" proste budem tam písať id=1 name=Kameň ...
2. Dám to vložiť do databázy.
3. Napíšem id=2 name=Hlina...
4. A zas do DB..
5. Ale ked napríklad zabudnem napísať nejaké číslo a potom ho budem chceť dopísať, tak sa mi napíše nakoniec tabulky v DB. a ja ot tam chcem mať v postupnosti

Dá sa to?
Monkeys
Profil *
Sobky:

Udaje v databaze nie su verejne. Preto sa pri vypisovani dát z databazi v urcitom slede a postupnosti vyuziva ORDER BY ako uz pisal Joker

M.
Sobky
Profil
Ale ja to chcem v DB postupne ja viem ako sa to vypisuje z nej postupne
lionel messi
Profil
Sobky:
Ale ja to chcem v DB postupne ja viem ako sa to vypisuje z nej postupne
Je nejaký relevantný dôvod tvojej tvrdohlavosti? Inak, ak používaš nejakého klienta (napr. PHPMyAdmin), tak tam si pri zobrazení tabuľky kliknutím na názov stĺpca môžeš tabuľku podľa neho zoradiť, ak ti to pomôže…
Sobky
Profil
No dobre :D nechjate to tak lebo sme s anejako neporozumeli...

Môžete to uzavrieť
Joker
Profil
Sobky:
1. Vytvorím si na webe takú "apku" proste budem tam písať id=1 name=Kameň ...

Tak jsou dvě možnosti, buď to id je potřeba zadávat ručně (tj. aby každý záznam měl takové, jaké mu zadám) a potom ten požadavek na posloupnost je nesmyslný (když vložím jeden záznam který musí mít id=2 a žádný jiný tam není, jak by se to mělo zařídit?),
nebo má id jít postupně (druhý záznam má dostat 2 a je jedno jaký to bude) a od toho je právě ten AUTO_INCREMENT.

Ještě je možnost, že se podle id má zároveň určovat pořadí, pak je chyba právě v tom. Neurčujte pořadí podle id.
Tori
Profil
Sobky:
Ale ja to chcem v DB postupne
A proč vlastně? Z hlediska rychlosti není důležité, v jakém pořadí jsou data uložená. Daleko větší roli hrají indexy nad sloupci, podle kterých se má vyhledávat a/nebo řadit.

Dá sa to?
Pokud v té tabulce bude existovat jen jediný index (primární nebo obyčejný, to je jedno) a bude nastavený právě na tom sloupci s čísly, tak se záznamy z tabulky budou zobrazovat seřazené podle toho sloupce (i v případě, že v SQL dotazu použiju ORDER BY NULL). Když index odstraním, budou se zobrazovat opět napřeskáčku.

Nicméně, nemůžete ovlivnit způsob, jakým se ta data uloží fyzicky na disk - a všechno ostatní je už jen zobrazení těch dat, ať už použijete ORDER BY nebo ne, ať už je vypisujete v MySQL konzoli nebo přes PhpMyAdmin. Existuje např. příkaz OPTIMIZE TABLE, ale ten přeskládá (seřadí) na harddisku pouze indexy, ne samotné záznamy v tabulce (představte si třeba databázi finančního úřadu, kdyby ji chtěli fyzicky seřadit podle rodných čísel, kolik by to asi sežralo strojového času RAMky). Proto nedává vaše otázka ostatním smysl a nerozumíte si.
juriad
Profil
Tori:
Když nepoužiješ ORDER BY, může být výsledek vrácen v libovolném pořadí (nejčastěji to však bude v pořadí vkládání, pořadí uložení či pořadí nějakého indexu). Ale představ si, že máš tabulku rozprostřenou na mnoha nodech, select se přeloží na dotazy na jednotlivé nody, které vrátí částečné výsledky, pak dává smysl výsledky různě prokládat, podle toho, odkud zrovna máš dostupná data.

Lepší je tedy explicitně požádat o řazení (které může ovlivnit výběr indexů a tím i celý plán), kdykoli ti na pořadí alespoň trochu záleží.
MySQL sice něco garantuje, ale obecně to neplatí a občas napíšeš aplikaci za pomoci nějaké knihovny (třeba dibi) a pak ti můžou přijít bugreporty, že to nefgunguje na nějaké jiné databázi, kterou jsi původně vůbec neuvažovala.
Tori
Profil
juriad:
Díky, neuvažovala jsem složitější návrh db.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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