Avatar
katrincsak
Člen
Avatar
katrincsak:

Zdravím,

mohl bych poprosit o pomoc?

Mám databázi několik tisíc skladeb a každá skladba má 2 hodnoty. Počet zobrazení a počet stažení. Potřeboval bych tyhle 2 hodnoty sečíst a zároveň seřadit od největšího po nejmenší. Potřeboval bych tedy pomoct se složením SQL příkazu, abych to nemusel řešit zbytečně složitě.

Děkuji za pomoc

 
Odpovědět 11. listopadu 16:00
Avatar
Oxtimus
Člen
Avatar
Odpovídá na katrincsak
Oxtimus:

Šlo by něco takového?

SELECT zobrazeni + stazeni AS sloupec FROM tabulka ORDER BY sloupec DESC
Editováno 11. listopadu 16:08
 
Nahoru Odpovědět 11. listopadu 16:07
Avatar
katrincsak
Člen
Avatar
Odpovídá na Oxtimus
katrincsak:

Jestli dojde k sečtení a pak teprve k porovnání, tak by to mohlo být ono. Náhodou nevíš jak složité a náročné pro výpočet by to mohlo být v případě násobení čísel. V případě že bych to ukládal, musel bych použit datový typ BIGINT (8 bitový) . Neumím si představit náročnost.

 
Nahoru Odpovědět 11. listopadu 16:12
Avatar
Oxtimus
Člen
Avatar
Odpovídá na katrincsak
Oxtimus:

Shodou náhod mám po ruce databázi s 10 305 položkami, od každého způsobu jsem vyzkoušel 10 pokusů a musím říct, že pro tak jednoduchý výpočet jako je sečtení/vynásobení dvou čísel se nevyplatí zakládat nový sloupec. Není to nijak výrazně rychlejší a navíc to má větší paměťové nároky.

Násobení:

SELECT zobrazeni * stazeni AS sloupec FROM tabulka ORDER BY sloupec DESC
// 0.0041 s
// 0.0050 s
// 0.0040 s
// 0.0041 s
// 0.0040 s
// 0.0041 s
// 0.0048 s
// 0.0041 s
// 0.0049 s
// 0.0040 s
// Průměrně 0.00431 s

Sčítání:

SELECT zobrazeni + stazeni AS sloupec FROM tabulka ORDER BY sloupec DESC
// 0.0049 s
// 0.0041 s
// 0.0042 s
// 0.0039 s
// 0.0039 s
// 0.0039 s
// 0.0041 s
// 0.0040 s
// 0.0039 s
// 0.0040 s
// Průměrně 0,00409 s

Uložení součtu do db jako 8b BIGINT:

SELECT sloupec FROM tabulka ORDER BY sloupec DESC
// 0.0046 s
// 0.0045 s
// 0.0047 s
// 0.0036 s
// 0.0037 s
// 0.0046 s
// 0.0038 s
// 0.0047 s
// 0.0038 s
// 0.0037 s
// Průměrně 0,00417 s
Editováno 11. listopadu 16:36
 
Nahoru Odpovědět 11. listopadu 16:36
Avatar
katrincsak
Člen
Avatar
Odpovídá na Oxtimus
katrincsak:

Tak to je pohoda, prakticky je to stejné.

Jak v tomto příkazu MySQL zapíšu sloupce, které má selectovat? víceméně potřebuji selectnout celou tabulku s porovnáním dat a následně je vypsat. Nedaří se mi do toho příkazu určit které sloupce a nebo operátor '*'

 
Nahoru Odpovědět 11. listopadu 16:40
Avatar
Oxtimus
Člen
Avatar
Odpovídá na katrincsak
Oxtimus:

Jednotlivé sloupce stačí oddělit čárkou:

SELECT *, zobrazeni + stazeni AS sloupec FROM tabulka ORDER BY sloupec DESC

Případně, pokud chceš vypsat tabulku bez onoho součtu (zobrazeni + stazeni), který použiješ pouze pro seřazení, můžeš napsat i toto:

SELECT * FROM tabulka ORDER BY stazeni + zobrazeni DESC
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 11. listopadu 16:46
Avatar
katrincsak
Člen
Avatar
katrincsak:

Paráda, moc děkuji. Jde vidět, že MySQL ovládáš velice dobře. Měl bych ještě jeden dotaz, ale to asi bez úpravy ukládání dat nepůjde.

Zobrazení je na 1 serveru a stažení na druhém serveru :D To aby to nebylo tak jednoduché, je možné nějak joinout 2 tabulky na 2 různých serverech? Vidím to ale na to, že se data stažení začnou ukládat na server číslo 1 a aktuální hodnoty jen přenesu.

 
Nahoru Odpovědět 11. listopadu 17:01
Avatar
Oxtimus
Člen
Avatar
Odpovídá na katrincsak
Oxtimus:

Pokud by šlo o dvě různé databáze na stejném serveru, šlo by to takto:

SELECT * FROM databaze1.tabulka JOIN databaze2.tabulka ON databaze1.tabulka.id = databaze2.tabulka.id

Ovšem pokud se jedná o dva různé servery, bude to problém. Šel by použít sp_addlinkedser­ver od Microsoftu, ve kterém by syntaxe byla analogická (server.databa­ze.tabulka.slou­pec), ovšem pro MySQL jsem nic takového nenašel. Něco jsem se dočetl o FEDERATED Storage Engine, ale s tím ti už poradit nedokážu.

 
Nahoru Odpovědět 11. listopadu 17:21
Avatar
katrincsak
Člen
Avatar
Odpovídá na Oxtimus
katrincsak:

Tohle jsem očekával že nebude tak lehce realizovatelné jako můj hlavní dotaz, což nevadí. Do budoucna stejně potřebuji některá data ukládat na hlavní server a tak to jen odložím a tohle udělám později spolu s dalšími věcmi.

I tak ti moc děkuji za tvůj čas a hodně jsi mi pomohl !

 
Nahoru Odpovědět 11. listopadu 17:42
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 9 zpráv z 9.