Portál AbcLinuxu, 12. května 2025 08:33

Dotaz: Mysql scitani podle datumu

petka avatar 22.6.2010 10:47 petka | skóre: 25 | blog: heydax | Klasterec N/O
Mysql scitani podle datumu
Přečteno: 332×
Odpovědět | Admin
Zdravim mam v databazi par zaznamu ulozenych jako datum , ip , pocet dat za datum . A potreboval bych vzdy secist data od urciteho data do urciteho . Priklad od datumu 2010-06-01 do 2010-06-20 s tim ze nektere datumy se v db nevyskytuji a to cele vzdy jen pro jednu ip .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.6.2010 10:55 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Odpovědět | | Sbalit | Link | Blokovat | Admin
SUM?
Heron avatar 22.6.2010 10:56 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Odpovědět | | Sbalit | Link | Blokovat | Admin

Co nějak takto?

SELECT SUM(`prenos`)
  FROM `tabulka`
  WHERE `ip`=nejakaip AND `datum` BETWEEN 'pocatecnidatum' AND 'konecnedatum';
Heron
petka avatar 23.6.2010 01:00 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Funguje ale s tim ze vystup je 0 , pokud dam umyslne pro kontrolu neexistujici sloupce v tabulce tak NULL . Ve sloupci prenos mam cisla jako bigint . Vysledkem je vsak cislo 0 .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
23.6.2010 08:46 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Pokud je tam 0 tak za Vámi zadaných podmínek je suma 0.
Pokud zadáte neexistující sloupec pro kontrolu, tak to vyhodí chybu :), pokud ovšem myslíte, že žádné řádky nevyhovují podmínce, tak ano vrátí to NULL.
Asi by jste měl ukázat Váš dotaz a strukturu tabulky, lze ji zobrazit pomocí příkazu SHOW CREATE TABLE `tabulka`; a ze tři záznamy, které tabulka obsahuje, třeba pomocí SELECT * FROM `tabulka` LIMIT 3;.
PS: nepatří to spíše do DB poradny? :)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Heron avatar 23.6.2010 08:51 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Nerozumím. SUM nad neexistující sloupcem nemůže MySQL vykonat a musí vrátit chybu. Dej sem celý kód pro vytvoření tabulky a ten dotaz, jak jej máš u sebe.
petka avatar 23.6.2010 10:05 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Tabulka
+-------------+------------+------------+-------------+
| 192.168.0.2 | 2010-06-20 |     631556 | 605978      | 
| 192.168.0.3 | 2010-06-20 |   45728639 | 1247445708  | 
| 192.168.0.4 | 2010-06-20 |      56461 | 162260      | 
| 192.168.0.5 | 2010-06-20 |  772212826 | 35172305602 | 
| 192.168.0.6 | 2010-06-20 |          0 | 124320      | 
| 192.168.0.7 | 2010-06-20 |          0 | 124320      | 
| 192.168.1.2 | 2010-06-20 |    1821936 | 81646996    | 
| 192.168.0.2 | 2010-06-21 |     620653 | 597616      | 
| 192.168.0.3 | 2010-06-21 |    9470534 | 162809724   | 
| 192.168.0.4 | 2010-06-21 |     381980 | 419496      | 
| 192.168.0.5 | 2010-06-21 | 1083498066 | 49329996906 | 
| 192.168.0.6 | 2010-06-21 |          0 | 131712      | 
| 192.168.0.7 | 2010-06-21 |          0 | 131712      | 
| 192.168.1.2 | 2010-06-21 |     599149 | 7495426     | 
| 192.168.0.2 | 2010-06-22 |     479106 | 458959      | 
| 192.168.0.3 | 2010-06-22 |   22005626 | 315926479   | 
| 192.168.0.4 | 2010-06-22 |    1551534 | 1303148     | 
| 192.168.0.5 | 2010-06-22 |     762227 | 24682077    | 
| 192.168.0.6 | 2010-06-22 |      22764 | 102816      | 
| 192.168.0.7 | 2010-06-22 |          0 | 102816      | 
| 192.168.1.2 | 2010-06-22 |    4276717 | 29151277    | 
| 192.168.0.2 | 2010-06-23 |      75194 | 71447       | 
| 192.168.0.3 | 2010-06-23 |          0 | 16548       | 
| 192.168.0.4 | 2010-06-23 |          0 | 16632       | 
| 192.168.0.5 | 2010-06-23 |       1823 | 17898       | 
| 192.168.0.6 | 2010-06-23 |          0 | 16632       | 
| 192.168.0.7 | 2010-06-23 |          0 | 16632       | 
| 192.168.1.2 | 2010-06-23 |    3111516 | 34678239    | 
+-------------+------------+------------+-------------+
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
petka avatar 23.6.2010 10:07 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Dotaz
SELECT SUM('data_out') FROM rrd_account WHERE ip = '192.168.0.3' AND datum BETWEEN '2010-06-20' AND '2010-06-23'"
+------+
|    0 | 
+------+
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
23.6.2010 10:38 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Hledejte dva rozdíly:
SELECT SUM(`data_out`) FROM rrd_account WHERE ip = '192.168.0.3' AND datum BETWEEN '2010-06-20' AND '2010-06-23'.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
petka avatar 24.6.2010 10:43 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Pokud jde o zpetna uvozovky tak shell bere to co je v uvozovkach jako aktivni promennou ,takze nelze pouzit . Klasicne uvozovky funguji v jinem pripade spravne . Mozna ze jsem zapomel uvest ze prikaz provadim v shellu a ne v php .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
24.6.2010 10:49 chrono
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
MySQL je úplne jedno, odkiaľ tá požiadavka príde a ` stále znamená niečo iné ako '. ;) (stačí pred znaky ` pridať \)
Řešení 1× (petka (tazatel))
petka avatar 24.6.2010 10:47 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Uz to mam hotove , jen kdyby se to nekomu hodilo , tak spravna syntaxe pro shell .
SELECT SUM(data_out) FROM rrd_account WHERE ip = '192.168.0.3' AND datum BETWEEN '2010-06-20' AND '2010-06-21'
Teda bez uvozovek .
Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
24.6.2010 11:06 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Není to "správná syntaxe pro shell", to je jiná syntaxe fungující m.j. i v shellu a má tuším jistá omezení u řetězců obsahujících mezeru. Pokud chcete v shellu syntaxi odpovídající SELECT SUM(`data_out`), musíte zvláštní znak ` escapovat, tedy SELECT SUM(\`data_out\`).
25.6.2010 09:25 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Mysql scitani podle datumu
Sorry, že to tak píšu, ale je to; „plantání košů s baňama“.
Jak bylo již i napsáno, je třeba rozlišovat co je vlastní SQL dotaz a co je interpretace tím čím to MySQL předávám. To, že „shell“ provádí text mezi `` jako příkaz, je prostě jeho vlastností a je to třeba respektovat.
Zaměňovat `` za '' je nesmysl, každé mají jiný význam,
  • text mezi `` uvádí názvy sloupců, tabulek, databází a vhodné je, je uvádět vždy, zvláště pokud dobře neznáte MySQL.
    Tento text mezi ``je vždy vyhodnocen jako název tabulky, sloupce atd., bez ohledu jestli obsahuje například mezery či je to rezervované slovo.
  • Text mezi '' je řetězcová konstanta (prostě text), kde znak ' musí být zapsán a jako \'.
To k čemu došlo, když jste uvozovky zaměnil je, že SUM('data_out') se zpracovalo tak, že text 'data_out' se převedl implicitní konverzí na číslo, což je 0 a SUM(0) = 0

Takže zápis:
SELECT SUM(data_out) FROM rrd_account WHERE ip = '192.168.0.3' AND datum BETWEEN '2010-06-20' AND '2010-06-21'
je jedním z možných, nicméně správnější a hlavně bezproblémovější je:
SELECT SUM(`data_out`) FROM `rrd_account` WHERE `ip`='192.168.0.3' AND `datum` BETWEEN '2010-06-20' AND '2010-06-21'
Toliko SQL●
Pokud máme dotaz a chceme jej vykonat z řádku, musím jej správně zapsat tak, aby opravdu v takové formě prošel k mysql.
Lze to zapsat různými způsoby např.:
mysql ... -e "SELECT SUM(\`data_out\`) FROM \`rrd_account\` WHERE \`ip\`='192.168.0.3' AND datum BETWEEN '2010-06-20' AND '2010-06-21'"
mysql ... -e 'SELECT SUM(`data_out`) FROM `rrd_account` WHERE `ip`'"='192.168.0.3' AND "'`datum`'" BETWEEN '2010-06-20' AND '2010-06-21'"
Ale, že bych označil jen jeden za správný, to bych si netroufl, ale už bych si troufl říct, že váš je samozřejmě funkční, ale není úplně čistý a kdyby někdy v budoucnu vzniklo klíčové slovo například 'IP', mohlo by se stát, že dotaz již nebude funkční nebo také teoreticky by mohl udělat něco jiného.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.