Rijen tellen per maand
Daar was ik weer :-)
Ik krijg al redelijk door hoe ik moet sorteren en groeperen bij een SELECT.
Alleen ik loop nu vast bij het sorteren van een "complex" datum veld.
de inhoud van het veld is bijvoorbeeld: 2018-05-04 21:00:00
om dit weer te geven in een tabel dat gaat prima op de volgende manier:
Code (php)
Wat ik nu wil doen is het volgende.
Ik wil als uitkomst het aantal rijen die er zijn per maand.
ik ben nu alleen het spoor bijster hoe ik dit nu moet verwerken in een SELECT
Ik dacht zelf aan het volgende alleen doet het niets.
Code (php)
Waarom je een variabele $column_date gebruikt ben ik ook wel benieuwd naar.
als antwoord op je vraag:
MYSQL heeft ook uitstekende datum/tijd functies. Je zou MONTH() en YEAR() kunnen gebruiken om de maand en jaartal uit de datum te trekken.
Code (php)
1
2
3
4
2
3
4
SELECT YEAR($column_date) AS year, MONTH($column_date) AS month, COUNT(*) AS hits
FROM $db_table
GROUP BY year, month
ORDER BY $column_date DESC
FROM $db_table
GROUP BY year, month
ORDER BY $column_date DESC
resultaat:
Gewijzigd op 06/05/2018 09:36:45 door Frank Nietbelangrijk
Bedankt voor je reactie.
Ik was toevallig net ook gestuit op deze functies.
Ik heb het volgende stukje toegepast. alleen krijg ik er geen enkele data uit..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$sql = "SELECT YEAR($column_date) AS year, MONTH($column_date) AS month, COUNT(*) AS hits FROM $db_table GROUP BY year, month ORDER BY $column_date DESC";
// Print out result
$column_date = 'COL_TIME_ON' ;
$result=mysqli_query($conn,$sql);
while ($row = mysql_fetch_array($result)) {
echo "<td>".$row['year']."</td>" ;
echo "<td>".$row['month']."</td>" ;
echo "<td>".$row['hits']."</td></tr>" ;
}
?>
$sql = "SELECT YEAR($column_date) AS year, MONTH($column_date) AS month, COUNT(*) AS hits FROM $db_table GROUP BY year, month ORDER BY $column_date DESC";
// Print out result
$column_date = 'COL_TIME_ON' ;
$result=mysqli_query($conn,$sql);
while ($row = mysql_fetch_array($result)) {
echo "<td>".$row['year']."</td>" ;
echo "<td>".$row['month']."</td>" ;
echo "<td>".$row['hits']."</td></tr>" ;
}
?>
Gewijzigd op 07/05/2018 14:06:33 door Bjorn Pas
Los daarvan gebruik je de oude mysql_***() driver om te fetchen, en gebruik je de nieuwe mysqli-driver voor je query. Dat werkt natuurlijk niet.
En natuurlijk zie ik je $conn nergens terugkomen, maar dat zal je hopelijk in je echte script wel doen.
Gewijzigd op 07/05/2018 14:10:33 door - Ariën -
een echo van $sql geeft:
SELECT YEAR(COL_TIME_ON) AS year, MONTH(COL_TIME_ON) AS month, COUNT(*) AS hits FROM TABLE_HRD_CONTACTS_V01 GROUP BY year, month ORDER BY COL_TIME_ON DESC
Dat lijkt allemaal te kloppen.. ook de tabel naam.
Ik heb die regel ook aangepast met mysqli
Maar geen resultaat.
Ik ben even het spoor bijster, het is voor mij allemaal nieuw. ben net krap 4 weken bezig met php :-)
Gewijzigd op 07/05/2018 14:15:49 door Bjorn Pas
Voer die query eens uit in je phpMyAdmin of je MySQL-client die je maar gebruikt.
SQL-query: Documentatie
SELECT YEAR(COL_TIME_ON) AS year, MONTH(COL_TIME_ON) AS month, COUNT(*) AS hits FROM TABLE_HRD_CONTACTS_V01 GROUP BY year, month ORDER BY COL_TIME_ON DESC LIMIT 0, 25
MySQL meldt: Documentatie
#1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'pd5dj_hrd.TABLE_HRD_CONTACTS_V01.COL_TIME_ON' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Toevoeging op 07/05/2018 14:47:59:
Got it!
ORDER BY moest zijn:
ODRDER BY year, month DESC
:-)
Gewijzigd op 07/05/2018 14:47:45 door Bjorn Pas
ORDER BY year, month DESC dus ;-)
Nu eens kijken of we deze data nu in een grafiek kunnen verwerken :-)