Autor Zpráva
Tomast
Profil
Zdravím,
mám v db tabulku se sloupci rok, měsíc, den a potom sloupce od 0 do 23. Potřeboval bych helpnout s tím, jak sečíst řádek, ale pouze od 0 do 23 a zároveň vybrat, aby platilo FROM `$db` WHERE `year` LIKE '2010' AND `month` LIKE '7', takže to vypíše 31 záznamů, resp. sečtených hodnot z 0-23, a z těch 31 záznamů potřebuji dostat max(), ale ještě jsem nepřišel na to, jak. Záznamy se mi povedly vypsat přes while, ale to max() nevím kam dát. (Možná funguje i jednoduší cesta než vypsat 31 záznamů a pak je porovnávat max())
Poradí někdo? Díky.
TomášK
Profil
Dotaz mi nepřijde příliš srozumitelný, ale zdá se mi, že hledáš
SELECT MAX(sloupec0 + ... + sloupec23) FROM ...
.

Co je v té tabulce reálně uloženo? Vypadá to jako špatně navržená struktura, 23 sloupců, které chceš sčítat, je opravdu podezřelých. A ještě jeden tip - MySQL má datové typy pro rok a měsíc.
xmark
Profil
Ještě bych doplnil, že
WHERE `year` LIKE '2010' AND `month` LIKE '7'

je hodně fuj. Nevidím nejmenší důvod rok a měsíc porovnávat jinak než
WHERE year  = 2010 AND month =7
TomášK
Profil
xmark:
Tuším, že jeho porovnávání by nefungovalo, pokud by sloupce neměl uložené jako řetězce. Tedy je nutné nejdřív změnit databázi a pak upravit porovnávání. Každopádně LIKE tu nemá co dělat, nelze než souhlasit.
K tvé variantě: je nutno zachovat apostrofy, neboť MONTH i YEAR jsou datové typy.
WHERE `year`  = 2010 AND `month` = 7
xmark
Profil
TomášK:
Jasně, skladovat číslo jako string je nesmysl, to jsem nenapsal.
A ano, ty apostrofy by v tomto případě byly potřeba, omlouvám se.
TomášK
Profil
xmark:
Nechtěl jsem říct, že jsi to napsal, jen že v případě Tomaset to nebude jen o tom nahradit LIKE za =
Tomast
Profil
TomášK:
SELECT MAX(sloupec0 + ... + sloupec23) FROM ...

Jo něco takového hledám, hned to vyzkouším

Pro doplnění:
WHERE `year` LIKE '2010' AND `month` LIKE '7'

Tuto možnost mi vypsal phpMyAdmin. Ale do budoucna se budu řídit touto jednoduší (kterou taky nabízel, ale ne tak přednostně :) ):
WHERE `year`  = 2010 AND `month` = 7


Pro doplnění mého dotazu se jedná o tabulku s návštěvností. 0-23 jsou návštěvy v jednotlivé hodiny, pak jsou ještě sloupce year, month, day, Tento konkrétná příklad sčítá hodnoty v jednotlivé dny (0-23) a měl by je porovnávat s ostatními dny v měsíci a určit nejvyšší hodnotu v daném měsíci.
TomášK
Profil
Návrh té tabulky je dost příšerný a doporučuju změnit. Jakmile potřebuješ číslovat sloupce, je něco špatně. O něco lepší návrh je tabulka(year, month, day, hour) - ukládat i tu hodinu stejně jako rok, měsíc, den. A ještě lepší mi přijde ukládat jen čas návštěvy a pak z něj vhodnými dotazy dolovat statistiky: table(navstiveno DATETIME).
Tomast
Profil
Nevím, ale takhle se mi zdá, že v té tabulce bude daleko více záznamů a potom je třídit bude zbytečně zatěžovat DB. Ukládat jednotlivé návštěvy už jsem zkoušel, za necelý měsíc jsem měl přes 1000 záznamů, takhle bych měl jen 365 záznamů za celý rok. Zkusím tu tabulku pár dní testovat a pak uvidím, co bude lepší.
xmark
Profil
Tomast:
1000 záznamů za měsíc je drobnost. Mysql není access 2.0. Souhlasím s TomášK, že máš databázi špatně navrženou. Když budeš ukládat jednotlivé návštěvy, budeš mít mnohem víc možností generovat jakékoliv přehledy.
Tomast
Profil
Oky, tak já to zkusím překopat, díky za rady.
Neznáte nějakou dobrou stránku, kde by bylo popsáno DATETIME, nejlépe v češtině. Vím že google napoví, ale né vždy to nejlepší, proto je lepší se obrátit na odborníky.

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:

0