I'm using the following SQL query to select rows from through an inner join sorted by the date.
SELECT *
FROM clubnights
INNER JOIN club ON clubnights.club = club.club_ID
WHERE visibility = 0
AND date >= CURDATE()
ORDER BY clubnights.date ASC
I then load all the data in my HTML via a PHP while loop.
My aim is to echo an HTML header above every section of any given date.
Therefore I am looking to detect (either via PHP or SQL) when a change in date is detected via the select query. Basically, I want to compare the last 'date' column to the current one, and if they do not match I will echo something via PHP.
An example, assuming the following are rows:
2016-09-16 - Row 1 // Detect 'change' here as it's the first row
2016-09-16 - Row 2
2016-09-16 - Row 3
2016-09-16 - Row 4
2016-09-16 - Row 5
2016-09-17 - Row 6 // Detect change here as date has changed
2016-09-17 - Row 7
2016-09-17 - Row 8
Edit: I am using MySQL
The SQL DISTINCT keyword, which we have already discussed is used in conjunction with the SELECT statement to eliminate all the duplicate records and by fetching only the unique records.
You can find duplicates by grouping rows, using the COUNT aggregate function, and specifying a HAVING clause with which to filter rows.
If I understand your requirement, then for groups of records sharing the same date, the record with the smallest club_ID
is the first record in that group. In the answer below, I use a subquery to find the minimum club_ID
for each date. This subquery is then joined to your original query to determine which record is the first, for each date.
SELECT clubnights.*,
club.*,
CASE WHEN t.club_ID IS NOT NULL THEN 'change' END AS date_changed
FROM clubnights
INNER JOIN club
ON clubnights.club = club.club_ID
LEFT JOIN
(
SELECT MIN(club.club_ID) AS club_ID,
clubnights.date AS date
FROM clubnights
INNER JOIN club
ON clubnights.club = club.club_ID
GROUP BY clubnights.date
) t
ON clubnights.date = t.date AND
club.club_ID = t.club_ID
Note that I prefer this solution to handling the problem in the PHP presentation layer, because MySQL was designed to manipulate data efficiently, PHP much less so.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With