Rijen tellen per maand

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bjorn Pas

Bjorn Pas

05/05/2018 18:44:16
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
echo '<td>'. date('d F', strtotime($row[$column_date])) . '</td>' ; //dag en maand
echo '<td>'. date('Y', strtotime($row[$column_date])) . '</td>' ; //jaar    
echo '<td>'. date('G:i', strtotime($row[$column_date])) . '</td>' ; //Tijd
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
= "SELECT COUNT(date('F', strtotime($row[$column_date]))) FROM $db_table" ;
?>
 
PHP hulp

PHP hulp

15/11/2024 13:56:23
 
Frank Nietbelangrijk

Frank Nietbelangrijk

06/05/2018 02:12:57
Quote Anchor link
In je eerste stukje code reken je drie keer dezelfde timestamp uit. Dat is nogal duur, doe dat gewoon één keer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$timestamp
= strtotime($row[$column_date]);

echo '<td>'. date('d F', $timestamp) . '</td>' ; //dag en maand
echo '<td>'. date('Y', $timestamp) . '</td>' ; //jaar    
echo '<td>'. date('G:i', $timestamp) . '</td>' ; //Tijd
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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


resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
year | month | hits
-------------------
2018 |   2   |  3
2018 |   1   |  1
2017 |   2   |  6
Gewijzigd op 06/05/2018 09:36:45 door Frank Nietbelangrijk
 
Bjorn Pas

Bjorn Pas

07/05/2018 14:04:40
Quote Anchor link
Hoi Fank

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>" ;
}
            
?>
Gewijzigd op 07/05/2018 14:06:33 door Bjorn Pas
 
- Ariën  -
Beheerder

- Ariën -

07/05/2018 14:10:19
Quote Anchor link
Doe aan debugging, en echo eens $sql.
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 -
 
Bjorn Pas

Bjorn Pas

07/05/2018 14:14:51
Quote Anchor link
Hoi 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
 
- Ariën  -
Beheerder

- Ariën -

07/05/2018 14:21:11
Quote Anchor link
Voer die query eens uit in je phpMyAdmin of je MySQL-client die je maar gebruikt.
 
Bjorn Pas

Bjorn Pas

07/05/2018 14:27:04
Quote Anchor link
Dit is wat er uit komt:

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
 
- Ariën  -
Beheerder

- Ariën -

07/05/2018 15:34:19
Quote Anchor link
ORDER BY year, month DESC dus ;-)
 
Bjorn Pas

Bjorn Pas

07/05/2018 15:58:48
Quote Anchor link
Precies :-)

Nu eens kijken of we deze data nu in een grafiek kunnen verwerken :-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.