I am trying to write a PHP report for a MySql table however I am a bit stuck on the correct commands I should be looking in to…
The table structure is as follows:
| Int | employeeID | lessonID | date
| 1 | 15110 | 50 | 2010-10-18
| 2 | 15110 | 51 | 2010-10-18
| 3 | 15110 | 52 | 2010-10-18
| 4 | 15110 | 50 | 2010-10-18
| 5 | 13211 | 51 | 2010-10-18
| 6 | 13211 | 52 | 2010-10-18
| 7 | 11542 | 60 | 2010-10-18
So everytime a lesson is opened a new row is added with the employeeID and lessonID.
The report I am trying to create would show the people who have accessed lessonID 50, 51 and 52.
For example the report would look something like:
| employeeID | lessonID 50 | lessonID 51 | lessonID 52 |
15110 Y Y Y
13211 N Y Y
What I have so far for my SQL query is:
SELECT DISTINCT employeeID, lessonID
FROM elearning.el_lessonmetrics
WHERE lessonID = 50 OR lessonID = 51 OR lessonID = 52;
Which gives:
| employeeID | lessonID |
15110 50
15110 51
15110 52
13211 50
13211 51
Can anyone help me with how to shape those results into the report structure above?
Thanks
What you’re looking for is known as a pivot table.
There are several tutorials available on the internet for MySQL:
Now, as far as your specific query, it depends on if the number of lessons are known before hand. If so, you could just join on itself for each lesson:
If you don’t know the number of lessons, or there are a large number of them then this method won’t work too well (and you’re likely better off post-processing the results in PHP to build your table)…
For example:
Then, in PHP
That will result in an array like: