Ik wil op een time-veld in mijn tabel een query loslaten waarbij ik een selectie maak op het onderdeel 'uur'.
Dit lukt me niet.
Ik heb de volgende query:
SELECT
COUNT(ss.id) AS aantal
FROM
sys__agenda AS ss
WHERE
substr(ss.aanvang,0,2) = 10
In bovenstaande query wil ik het aantal items tellen dat begint tussen 10:00 en 10:59 uur.
Het resultaat = 0 terwijl er 8 records in mijn tabel staan die een aanvangstijd tussen de genoemde periode hebben.
Waar ga ik de mist in??
George
Toevoeging op 05/03/2014 09:54:11:
Oh ja,
Het veld aanvang in mijn tabel is van het type time
Kun jij mij uitleggen waarom ik jouw voorkeur moet gebruiken boven die van Michael?
Volgens mij is de uitkomst bij beiden gelijk.
Overigens heb ik de query alsvolgt gebruikt:
<?php
sql = "SELECT
COUNT(IF(HOUR(aanvang) = 00,'Ja',NULL)) AS uur0,
COUNT(IF(HOUR(aanvang) = 01,'Ja',NULL)) AS uur1,
COUNT(IF(HOUR(aanvang) = 02,'Ja',NULL)) AS uur2,
COUNT(IF(HOUR(aanvang) = 03,'Ja',NULL)) AS uur3,
COUNT(IF(HOUR(aanvang) = 04,'Ja',NULL)) AS uur4,
COUNT(IF(HOUR(aanvang) = 05,'Ja',NULL)) AS uur5,
COUNT(IF(HOUR(aanvang) = 06,'Ja',NULL)) AS uur6,
COUNT(IF(HOUR(aanvang) = 07,'Ja',NULL)) AS uur7,
COUNT(IF(HOUR(aanvang) = 08,'Ja',NULL)) AS uur8,
COUNT(IF(HOUR(aanvang) = 09,'Ja',NULL)) AS uur9,
COUNT(IF(HOUR(aanvang) = 10,'Ja',NULL)) AS uur10,
COUNT(IF(HOUR(aanvang) = 11,'Ja',NULL)) AS uur11,
COUNT(IF(HOUR(aanvang) = 12,'Ja',NULL)) AS uur12,
COUNT(IF(HOUR(aanvang) = 13,'Ja',NULL)) AS uur13,
COUNT(IF(HOUR(aanvang) = 14,'Ja',NULL)) AS uur14,
COUNT(IF(HOUR(aanvang) = 15,'Ja',NULL)) AS uur15,
COUNT(IF(HOUR(aanvang) = 15,'Ja',NULL)) AS uur16,
COUNT(IF(HOUR(aanvang) = 17,'Ja',NULL)) AS uur17,
COUNT(IF(HOUR(aanvang) = 18,'Ja',NULL)) AS uur18,
COUNT(IF(HOUR(aanvang) = 19,'Ja',NULL)) AS uur19,
COUNT(IF(HOUR(aanvang) = 20,'Ja',NULL)) AS uur20,
COUNT(IF(HOUR(aanvang) = 21,'Ja',NULL)) AS uur21,
COUNT(IF(HOUR(aanvang) = 22,'Ja',NULL)) AS uur22,
COUNT(IF(HOUR(aanvang) = 23,'Ja',NULL)) AS uur23
FROM
sys__agenda
WHERE
datum = '$dGekozenDatum'";
?>
En deze query levert mij precies op wat ik zocht.
Wellicht moet/kan ik deze nog aanpassen als ik jouw visie hierop hoor.
(Ik leer graag nog het e.e.a. ;-) )
SELECT
t.uur,
COUNT(a.uur) AS aantal
FROM
(SELECT
@uur := @uur + 1 AS uur
FROM
mag_elke_tabelmet_min_24_rijen_zijn, (SELECT @uur := -1) uv
LIMIT 24
) t
LEFT JOIN
(SELECT
HOUR(aanvang) AS uur
FROM sys__agenda
WHERE datum = '$dGekozenDatum') a
ON t.uur = a.uur
Nu is deze manier wel wat trager, maar wel flexibel
@George (en) Michael
In het algemeen zet je een index je op kolommen waarop je vaak filtert, die je in join voorwaarden nodig hebt en/of waarop je sorteert.
Zodra je een functie over een kolom uitvoert, kan deze niet meer geïndexeerd worden, met als gevolg een full table scan.