-
Posts
24,607 -
Joined
-
Last visited
-
Days Won
831
Everything posted by Barand
-
I'd take the easy way out and use the database with a single query DATA TABLE : season; TABLE : price +-----------+----------------+------------+------------+--------+ +----+--------+------+-------+ | season_id | name | start_date | end_date | tariff | | id | tariff | day | price | +-----------+----------------+------------+------------+--------+ +----+--------+------+-------+ | 1 | Winter 2024 | 2024-11-01 | 2024-12-23 | LO | | 1 | ST | 0 | 70 | day 0 = Monday | 2 | Christmas 2024 | 2024-12-24 | 2025-01-02 | PK | | 2 | ST | 1 | 70 | | 3 | Easter 2025 | 2025-04-11 | 2025-04-27 | PK | | 3 | ST | 2 | 70 | | 4 | Summer 2025 | 2025-06-15 | 2025-08-31 | HI | | 4 | ST | 3 | 70 | +-----------+----------------+------------+------------+--------+ | 5 | ST | 4 | 90 | | 6 | ST | 5 | 90 | | 7 | ST | 6 | 70 | day 6 = Sunday TABLE : tariff | 8 | LO | 0 | 55 | +--------+-------------+ | 9 | LO | 1 | 55 | | tariff | description | | 10 | LO | 2 | 55 | +--------+-------------+ | 11 | LO | 3 | 55 | | HI | High season | | 12 | LO | 4 | 75 | | LO | Low season | | 13 | LO | 5 | 75 | | PK | Peak season | | 14 | LO | 6 | 55 | | ST | Standard | | 15 | HI | 0 | 90 | +--------+-------------+ | 16 | HI | 1 | 90 | | 17 | HI | 2 | 90 | TABLE : booking | 18 | HI | 3 | 90 | +----+------------+---------+------------+ | 19 | HI | 4 | 110 | | id | booking_no | room_no | book_date | | 20 | HI | 5 | 110 | +----+------------+---------+------------+ | 21 | HI | 6 | 90 | | 1 | 1 | 1 | 2025-05-07 | | 22 | PK | 0 | 110 | | 2 | 1 | 1 | 2025-05-08 | | 23 | PK | 1 | 110 | | 3 | 1 | 1 | 2025-05-09 | | 24 | PK | 2 | 110 | | 4 | 2 | 5 | 2025-04-25 | | 25 | PK | 3 | 110 | | 5 | 2 | 5 | 2025-04-26 | | 26 | PK | 4 | 125 | | 6 | 2 | 5 | 2025-04-27 | | 27 | PK | 5 | 125 | | 7 | 2 | 5 | 2025-04-28 | | 28 | PK | 6 | 110 | | 8 | 2 | 5 | 2025-04-29 | +----+--------+------+-------+ | 9 | 2 | 5 | 2025-04-30 | +----+------------+---------+------------+ QUERY SELECT b.booking_no , MIN(b.book_date) as `from` , MAX(b.book_date) as until , SUM(p.price) as total FROM booking b LEFT JOIN season s ON b.book_date between s.start_date AND s.end_date LEFT JOIN price p ON coalesce(s.tariff, 'ST') = p.tariff -- tariff defaults to "ST" if no seasons match date AND p.day = weekday(b.book_date) GROUP BY b.booking_no; +------------+------------+------------+-------+ | booking_no | from | until | total | +------------+------------+------------+-------+ | 1 | 2025-05-07 | 2025-05-09 | 230 | | 2 | 2025-04-25 | 2025-04-30 | 570 | +------------+------------+------------+-------+
-
Trying to use GLOB function to create gallery.
Barand replied to BluApple's topic in PHP Coding Help
<?php $images = glob("path/to/folder a/*.*"); foreach ($images as $i) { echo "<img src='$i'>"; } -
The DATEDIFF() function will give the difference in days. Use TIMESTAMPDIFF() which lets you the specify the units for the result. mysql> SELECT NOW(), timestampdiff(SECOND, '2025-04-26 20:30:00', NOW()) as diff; +---------------------+------+ | NOW() | diff | +---------------------+------+ | 2025-04-26 21:34:51 | 3891 | +---------------------+------+ 1 row in set (0.00 sec) mysql> SELECT NOW(), timestampdiff(MINUTE, '2025-04-26 20:30:00', NOW()) as diff; +---------------------+------+ | NOW() | diff | +---------------------+------+ | 2025-04-26 21:35:22 | 65 | +---------------------+------+ 1 row in set (0.00 sec)
-
How to get the current time and add 10 minutes?
Barand replied to rwahdan1978's topic in PHP Coding Help
If the only reason for that value is to write to the DB then you can do it in the insert query... INSERT INTO tablename (colx, coly, colz) VALUES (?, ?, NOW() + INTERVAL 10 MINUTE) -
Put icon insisde a link EG... <a href='https://facebook.com'> <i class="fa-brands fa-facebook w3-hover-opacity"></i> </a>
-
INSERT INTO `Bank_Reason` (`ID`, `ReasonID`, `Reason`,`Colour`) VALUES (1, 0, '---SELECT','#000000'), (2, 1, 'Other',','#0000ff'), ^^ Again!?
-
INSERT INTO `Bank_Reason` (`ID`, `ReasonID`, `Reason`,Colour') VALUES ^ | unwanted single quote
-
$surname_counts = array_count_values(array_map(fn($v)=>substr($v, strpos($v, '_', 0)+1), $names)); -> Array ( [jones] => 2 [smith] => 3 [doe] => 2 [jackson] => 1 )
-
Generate students postions based on marks scored in an exam
Barand replied to sule's topic in MySQL Help
Put this line just before the mysqli connection code... mysqli_report(MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT); Ensure error_reporting is ON. You should now get error messages if there are problems with a query. -
Generate students postions based on marks scored in an exam
Barand replied to sule's topic in MySQL Help
PS You aren't doing yourself any favours by insisting on mysqli. PDO is a superior library and easier to use. While you are still learning, put your effort into PDO -
Generate students postions based on marks scored in an exam
Barand replied to sule's topic in MySQL Help
Change $pdo = pdoConnect(); to $pdo = new mysqli(HOST, USERNAME, PASSWORD, DATABASE); Job done. -
Generate students postions based on marks scored in an exam
Barand replied to sule's topic in MySQL Help
BTW, it seems a pity that that those students who attain a C6 grade should receive only an anagram instead of a Credit -
Generate students postions based on marks scored in an exam
Barand replied to sule's topic in MySQL Help
@sule, Here are two version of the program A single loop tracking changes in studentid (as I suggested) Stores data in a muti-dimensional array and uses nested foreach() loops Version 1 <?php define("HOST", 'localhost'); define("USERNAME", '????'); define("PASSWORD", '????'); define("DATABASE", '????'); // default database name function pdoConnect($dbname=DATABASE) { $db = new PDO("mysql:host=".HOST.";dbname=$dbname;charset=utf8",USERNAME,PASSWORD); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::MYSQL_ATTR_LOCAL_INFILE, true); return $db; } $pdo = pdoConnect(); $res = $pdo->query("SELECT marks.acayear , marks.semester , marks.form , marks.class , marks.studentid , marks.name , marks.subject , marks.class_score1 , marks.exam_score1 , ROUND(marks.total, 1) as total , marks.grade , marks.remarks , RANK() OVER (PARTITION BY marks.acayear, marks.semester, marks.lessonsid ORDER BY marks.total DESC) as rank FROM marks WHERE marks.acayear='2024/2025' AND marks.semester='1' AND marks.form='3' AND marks.class='SCI A' ORDER BY name, subject; "); $previd = 0; $tdata = ''; foreach ($res as $r) { if ($r['studentid'] != $previd) { if ($previd != 0) { // if not the first $tdata .= "\n</table>\n</div>\n</div>\n\n"; // close preceding report } $tdata .= outputReportHeading(...array_slice($r, 0, 6)); $previd = $r['studentid']; } $tdata .= outputSubject(...array_slice($r, 6)); // close last report } $tdata .= "\n</table>\n</div>\n</div>\n\n"; # # FUNCTIONS # function outputReportHeading($acayear, $semester, $form, $class, $studentid, $name) { return <<<HEAD <div class='report w3-container w3-white'> <div class='report-head'> SAVELUGU SENIOR HIGH SCHOOL </div> <div class='report-head'> $acayear ACADEMIC YEAR </div> <div class='w3-row w3-margin-top'> <div class='w3-col m1 w3-center'> [SCHOOL<br>CREST] </div> <div class='w3-col m5 report-subhead'> Student ID: <span class='hval'>$studentid</span> <br> Name: <span class='hval'>$name</span> <br> Semester: <span class='hval'>$semester</span> </div> <div class='w3-col m5 report-subhead'> House: <span class='hval'></span> <br> Gender: <span class='hval'></span> <br> Class: <span class='hval'>$form $class</span> </div> <div class='w3-col m1 w3-center'> [PHOTO] </div> </div> <div class='report-head w3-margin-top'> STUDENT TERMINAL REPORT </div> <div class='w3-responsive'> <table border='1' class='scores'> <tr> <th>Subject</th> <th class='w3-hide-small'>Class Score</th> <th class='w3-hide-small'>Exam Score</th> <th>Total</th> <th>Grade</th> <th>Pos</th> <th>Remarks</th> </tr> HEAD; } function outputSubject($subject, $class_score1, $exam_score1, $total, $grade, $remarks, $rank) { return <<<SUB <tr> <td>$subject</td> <td class='w3-hide-small ca'>$class_score1</td> <td class='w3-hide-small ca'>$exam_score1</td> <td class='ca'>$total</td> <td class='ca'>$grade</td> <td class='ca'>$rank</td> <td>$remarks</td> </tr> SUB; } ?> <!DOCTYPE html> <html lang="en"> <head> <title>Example Reports 1</title> <meta charset="utf-8"> <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> <style type='text/css'> body { background-color: #FCF8E8; } .report { margin: 16px; padding: 8px; border: 1px solid gray; } .report-head { font-size: 18pt; font-weight: 600; text-align: center; } .report-subhead { font-size: 14pt; font-weight: 300; } .hval { font-weight: 600; color: blue; } .scores { width: 100%; border-collapse: collapse; } th { padding: 8px 2px; background-color: gray; color: white; } td { padding: 8px 4px; } .ca { text-align: center; } </style> </head> <body> <?= $tdata ?> </body> </html> Version 2 <?php define("HOST", 'localhost'); define("USERNAME", '????'); define("PASSWORD", '????'); define("DATABASE", '????'); // default database name function pdoConnect($dbname=DATABASE) { $db = new PDO("mysql:host=".HOST.";dbname=$dbname;charset=utf8",USERNAME,PASSWORD); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::MYSQL_ATTR_LOCAL_INFILE, true); return $db; } $pdo = pdoConnect(); $res = $pdo->query("SELECT marks.acayear , marks.semester , marks.form , marks.class , marks.studentid , marks.name , marks.subject , marks.class_score1 , marks.exam_score1 , ROUND(marks.total, 1) as total , marks.grade , marks.remarks , RANK() OVER (PARTITION BY marks.acayear, marks.semester, marks.lessonsid ORDER BY marks.total DESC) as rank FROM marks WHERE marks.acayear='2024/2025' AND marks.semester='1' AND marks.form='3' AND marks.class='SCI A' ORDER BY name, subject; "); $tdata = ''; # # store the data in a 3D array # $data = []; foreach ($res as $r) { if (!isset($data[$r['studentid']])) { $data[$r['studentid']] = [ 'head' => array_slice($r, 0, 6), 'scores' => [] ]; } $data[$r['studentid']]['scores'][] = array_slice($r, 6); } # echo '<pre>' . print_r($data, 1) . '</pre>'; // uncomment to view array structure # # PROCESS THE ARRAY # foreach ($data as $sdata) { $tdata .= outputReportHeading(...$sdata['head']); foreach ($sdata['scores'] as $subdata) { $tdata .= outputSubject(...$subdata); } $tdata .= "\n</table>\n</div>\n</div>\n\n"; } # # FUNCTIONS # function outputReportHeading($acayear, $semester, $form, $class, $studentid, $name) { return <<<HEAD <div class='report w3-container w3-white'> <div class='report-head'> SAVELUGU SENIOR HIGH SCHOOL </div> <div class='report-head'> $acayear ACADEMIC YEAR </div> <div class='w3-row w3-margin-top'> <div class='w3-col m1 w3-center'> [SCHOOL<br>CREST] </div> <div class='w3-col m5 report-subhead'> Student ID: <span class='hval'>$studentid</span> <br> Name: <span class='hval'>$name</span> <br> Semester: <span class='hval'>$semester</span> </div> <div class='w3-col m5 report-subhead'> House: <span class='hval'></span> <br> Gender: <span class='hval'></span> <br> Class: <span class='hval'>$form $class</span> </div> <div class='w3-col m1 w3-center'> [PHOTO] </div> </div> <div class='report-head w3-margin-top'> STUDENT TERMINAL REPORT </div> <div class='w3-responsive'> <table border='1' class='scores'> <tr> <th>Subject</th> <th class='w3-hide-small'>Class Score</th> <th class='w3-hide-small'>Exam Score</th> <th>Total</th> <th>Grade</th> <th>Pos</th> <th>Remarks</th> </tr> HEAD; } function outputSubject($subject, $class_score1, $exam_score1, $total, $grade, $remarks, $rank) { return <<<SUB <tr> <td>$subject</td> <td class='w3-hide-small ca'>$class_score1</td> <td class='w3-hide-small ca'>$exam_score1</td> <td class='ca'>$total</td> <td class='ca'>$grade</td> <td class='ca'>$rank</td> <td>$remarks</td> </tr> SUB; } ?> <!DOCTYPE html> <html lang="en"> <head> <title>Example Reports 2</title> <meta charset="utf-8"> <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> <style type='text/css'> body { background-color: #FCF8E8; } .report { margin: 16px; padding: 16px; border: 1px solid gray; } .report-head { font-size: 18pt; font-weight: 600; text-align: center; } .report-subhead { font-size: 14pt; font-weight: 300; } .hval { font-weight: 600; color: blue; } .scores { width: 100%; border-collapse: collapse; } th { padding: 8px 2px; background-color: gray; color: white; } td { padding: 8px 4px; } .ca { text-align: center; } </style> </head> <body> <?= $tdata ?> </body> </html> Samples -
Generate students postions based on marks scored in an exam
Barand replied to sule's topic in MySQL Help
Use the <> button when posting code -
Generate students postions based on marks scored in an exam
Barand replied to sule's topic in MySQL Help
I've just described a method to you. What have you now tried? (or are you just going to keep repeating the same question without trying the suggestion?) -
Generate students postions based on marks scored in an exam
Barand replied to sule's topic in MySQL Help
As you loop throught the query results, check for a change of studentid. Each time to reach a new student, out put the report headings (name, photo etc) then continue listing subject rows until the next change. Pseudocode... previd = 0; foreach result row { if studentid != previd { previd = studentid output report headings } output subject data } -
Generate students postions based on marks scored in an exam
Barand replied to sule's topic in MySQL Help
I couldn't find anything wrong with your query, although I had to limit my version to the marks table only as the other tables required seem to have fallen down the back of your sofa. I assumed you want the positions in their class. SELECT -- marks.acayear -- , marks.semester -- , marks.form -- , marks.class marks.studentid , marks.name , marks.subject , marks.class_score1 , marks.exam_score1 , marks.total , marks.remarks , RANK() OVER (PARTITION BY marks.lessonsid, marks.acayear, marks.form, marks.semester, marks.subject, marks.class ORDER BY marks.total DESC) as rank FROM marks WHERE marks.acayear='2024/2025' AND marks.semester='1' AND marks.form='3' AND marks.class='SCI A' ORDER BY name, SUBJECT; +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | studentid | name | subject | class_score1 | exam_score1 | total | remarks | rank | +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | 82611900422 | ABDUL-HANAN SA-EED | BIOLOGY | 0 | 0 | 0 | | 23 | | 82611900422 | ABDUL-HANAN SA-EED | CHEMISTRY | 0 | 0 | 0 | | 29 | | 82611900422 | ABDUL-HANAN SA-EED | ELECTIVE MATHS | 0 | 0 | 0 | | 29 | | 82611900422 | ABDUL-HANAN SA-EED | ENGLISH LANG | 0 | 0 | 0 | | 29 | | 82611900422 | ABDUL-HANAN SA-EED | ICT | 0 | 0 | 0 | | 26 | | 82611900422 | ABDUL-HANAN SA-EED | INT SCIENCE | 0 | 0 | 0 | | 29 | | 82611900422 | ABDUL-HANAN SA-EED | MATHEMATICS | 0 | 0 | 0 | | 25 | | 82611900422 | ABDUL-HANAN SA-EED | PHYSICS | 0 | 0 | 0 | | 27 | | 82611900422 | ABDUL-HANAN SA-EED | SOCIAL STUDIES | 0 | 0 | 0 | | 26 | +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | 80106802422 | ABDUL-RAHMAN NASIBA | BIOLOGY | 23.4 | 53.9 | 77.3 | Very Good | 3 | | 80106802422 | ABDUL-RAHMAN NASIBA | CHEMISTRY | 16.8 | 53.2 | 70 | Very Good | 6 | | 80106802422 | ABDUL-RAHMAN NASIBA | ELECTIVE MATHS | 16.8 | 53.9 | 70.7 | Very Good | 11 | | 80106802422 | ABDUL-RAHMAN NASIBA | ENGLISH LANG | 20.1 | 39.2 | 59.3 | Credit | 18 | | 80106802422 | ABDUL-RAHMAN NASIBA | ICT | 16.8 | 23.8 | 40.6 | Pass | 25 | | 80106802422 | ABDUL-RAHMAN NASIBA | INT SCIENCE | 20.1 | 39.2 | 59.3 | Credit | 14 | | 80106802422 | ABDUL-RAHMAN NASIBA | MATHEMATICS | 16.8 | 30.8 | 47.6 | Pass | 21 | | 80106802422 | ABDUL-RAHMAN NASIBA | PHYSICS | 16.8 | 53.9 | 70.7 | Very Good | 8 | | 80106802422 | ABDUL-RAHMAN NASIBA | SOCIAL STUDIES | 13.5 | 23.1 | 36.6 | Fail | 25 | +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | 82606700822 | ABUBAKARI ABDUL HALIK | BIOLOGY | 13.5 | 45.5 | 59 | Credit | 11 | | 82606700822 | ABUBAKARI ABDUL HALIK | CHEMISTRY | 22.8 | 53.9 | 76.7 | Very Good | 5 | | 82606700822 | ABUBAKARI ABDUL HALIK | ELECTIVE MATHS | 13.5 | 39.2 | 52.7 | Crdeit | 26 | | 82606700822 | ABUBAKARI ABDUL HALIK | ENGLISH LANG | 20.1 | 46.2 | 66.3 | Good | 14 | | 82606700822 | ABUBAKARI ABDUL HALIK | ICT | 13.5 | 46.2 | 59.7 | Credit | 15 | | 82606700822 | ABUBAKARI ABDUL HALIK | INT SCIENCE | 22.8 | 53.9 | 76.7 | Very Good | 5 | | 82606700822 | ABUBAKARI ABDUL HALIK | MATHEMATICS | 23.1 | 45.5 | 68.6 | Good | 10 | | 82606700822 | ABUBAKARI ABDUL HALIK | PHYSICS | 13.5 | 23.8 | 37.3 | Fail | 24 | | 82606700822 | ABUBAKARI ABDUL HALIK | SOCIAL STUDIES | 16.8 | 30.8 | 47.6 | Pass | 21 | +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | 80115900922 | ALAWI ABDALLAH | BIOLOGY | 10.2 | 37.8 | 48 | Pass | 13 | | 80115900922 | ALAWI ABDALLAH | CHEMISTRY | 22.8 | 38.5 | 61.3 | Credit | 8 | | 80115900922 | ALAWI ABDALLAH | ELECTIVE MATHS | 23.1 | 39.2 | 62.3 | Credit | 20 | | 80115900922 | ALAWI ABDALLAH | ENGLISH LANG | 16.8 | 53.9 | 70.7 | Very Good | 12 | | 80115900922 | ALAWI ABDALLAH | ICT | 13.5 | 39.2 | 52.7 | Crdeit | 22 | | 80115900922 | ALAWI ABDALLAH | INT SCIENCE | 19.8 | 37.8 | 57.6 | Credit | 16 | | 80115900922 | ALAWI ABDALLAH | MATHEMATICS | 26.4 | 46.9 | 73.3 | Very Good | 3 | | 80115900922 | ALAWI ABDALLAH | PHYSICS | 16.8 | 38.5 | 55.3 | Credit | 17 | | 80115900922 | ALAWI ABDALLAH | SOCIAL STUDIES | 13.5 | 23.8 | 37.3 | Fail | 24 | +-------------+--------------------------+----------------+--------------+-------------+-------+-----------+------+ | etc... -
PHP text email message - remove part of message if no data or blank
Barand replied to CBG's topic in PHP Coding Help
You can't concatenate an if() statement like that. Try $message = 'Message goes here' . "\r\n" . 'Name: ' . $name . "\r\n"; if ($doesthishavedata != '') { $message .= 'Does this have data: ' . $doesthishavedata . "\r\n"; } $message .= 'something else: ' . $hasdata . "\r\n" . -
PHP text email message - remove part of message if no data or blank
Barand replied to CBG's topic in PHP Coding Help
An "if() construct" often comes in useful at times like this. -
Insert into record where 2 fields must match
Barand replied to singingsands's topic in PHP Coding Help
Inser queries cannot have a WHERE clause. You need an UPDATE query -
You don't need the braces so long as there are only single statements to be executed but only if they are in the same <?php .. ?> block of code. EG this works... <?php if (date('d')==24) echo 'today'; else echo 'Not today'; ?>
-
Are you using <?php ... ?> or <? ... ?> in your code when you enter a php code section? The short version (<?) is no longer a default and requires an ini file setting to enable.
-
I'd do something like this... <?php $data = [ '46.105.73.18:27015' => [ 'gq_address' => '46.105.73.18', 'gq_dedicated' => '', 'gq_gametype' => '', 'gq_hostname' => '', 'gq_joinlink' => 'steam://connect/46.105.73.18:27015/' , 'gq_mapname' => '', 'gq_maxplayers' => '', 'gq_mod' => '', 'gq_name' => 'Counter-Strike: Source' , 'gq_numplayers' => '', 'gq_online' => '', 'gq_password' => '', 'gq_port_client' => 27015 , 'gq_port_query' => 27015 , 'gq_protocol' => 'source' , 'gq_transport' => 'udp' , 'gq_type' => 'css' , 'players' => Array (), 'teams' => Array () ] ] ; $tdata = ''; foreach ($data as $k => $v) { $v = array_filter($v); // get rid of blank values $tdata .= "<table border='1'> <tr><th>Array key</th><th>" . join('</th><th>', array_keys($v)) . "</th></tr>\n"; // output headings $tdata .= "<tr><th class='rowth'>$k</th><td>" . join('</td><td>', array_values($v)) . "</td></tr> // output values </table>\n"; } ?> <html lang='en'> <head> <meta 'charset'='utf-8'> <title>Example</title> <style type='text/css'> table { border-collapse: collapse; margin-bottom: 10px; } th { background-color: #444; color: white; padding: 8px; } .rowth { background-color: #888; } td { padding: 8px; text-align: center; } </style> </head> <body> <?= $tdata ?> </body> </html> Giving ...
-
I fell foul of that this morning. It worked fine yesterday when I posted the query but when I loaded some more data and ran it again after midnight I got nothing. The last date I had was 2025-01-26 so -7 DAY worked fine on the 2nd Feb but not on the 3rd. On the subject of temporary tables, have a look at WITH RECURSIVE. There may be occasions when you want to list, say, total sales for each day last month and show a zero total for days with no sales. You can't just sum, grouping by the dates, as you won't get output if there is no data fora date. You need a table containing all the dates in the month and use a left join. WITH RECURSIVE gives a great way of create such a temporary date table on the fly.
-
Could be there is no data in the table for the last 7 days. Try "- INTERVAL 1 MONTH"