Autor | Zpráva | ||
---|---|---|---|
Tomast Profil |
#1 · Zasláno: 31. 7. 2010, 21:06:29
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 |
#2 · Zasláno: 31. 7. 2010, 23:49:49
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 |
#3 · Zasláno: 1. 8. 2010, 02:55:54
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 |
#4 · Zasláno: 1. 8. 2010, 03:05:44
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 |
#5 · Zasláno: 1. 8. 2010, 03:13:00
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 |
#6 · Zasláno: 1. 8. 2010, 03:48:13
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 |
#7 · Zasláno: 1. 8. 2010, 11:47:35
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 |
#8 · Zasláno: 1. 8. 2010, 12:42:05
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 |
#9 · Zasláno: 1. 8. 2010, 16:05:07
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 |
#10 · Zasláno: 1. 8. 2010, 16:15:57
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 |
#11 · Zasláno: 1. 8. 2010, 20:54:34
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. |
||
Časová prodleva: 14 let
|
0