Mysql join kleine aanpassing nodig
Enkele jaren geleden heeft iemand voor mij een prachtige sql join query geschreven welke de laatste 6 beoordelingen uit de database haalde op basis van datum en tijd.
Ik heb besloten om de database wat om te bouwen waardoor ik het veld datum_tijd niet meer hebt maar wel datum en tijd los van elkaar.
Hoe kan ik deze in de query koppelen zodat alles weer werkt (gaat dus om b.datum_tijd en r.datum_tijd):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
$q = 'SELECT
g.voornaam,
g.achternaam,
g.logo_path,
DATE_FORMAT(g.max_date, "%Y-%m-%d") datum,
DATE_FORMAT(g.max_date, "%H:%i") tijd,
r.mening,
r.beoordeling,
r.reviewer_id,
r.datum,
r.score,
r.domein_id
FROM
(SELECT
ge.id,
ge.voornaam,
ge.achternaam,
ge.logo_path,
MAX(b.datum_tijd) max_date
FROM
gebruikers ge
JOIN
beoordelingen b
ON
ge.id = b.reviewer_id
WHERE
ge.status = 1 AND b.status = 1 AND CHAR_LENGTH(b.beoordeling)>30
GROUP BY
ge.id, ge.voornaam, ge.achternaam, ge.logo_path
ORDER BY max_date DESC LIMIT 6
) g
JOIN
beoordelingen r
ON
g.id = r.reviewer_id AND g.max_date = r.datum_tijd order by g.max_date DESC ';
?>
$q = 'SELECT
g.voornaam,
g.achternaam,
g.logo_path,
DATE_FORMAT(g.max_date, "%Y-%m-%d") datum,
DATE_FORMAT(g.max_date, "%H:%i") tijd,
r.mening,
r.beoordeling,
r.reviewer_id,
r.datum,
r.score,
r.domein_id
FROM
(SELECT
ge.id,
ge.voornaam,
ge.achternaam,
ge.logo_path,
MAX(b.datum_tijd) max_date
FROM
gebruikers ge
JOIN
beoordelingen b
ON
ge.id = b.reviewer_id
WHERE
ge.status = 1 AND b.status = 1 AND CHAR_LENGTH(b.beoordeling)>30
GROUP BY
ge.id, ge.voornaam, ge.achternaam, ge.logo_path
ORDER BY max_date DESC LIMIT 6
) g
JOIN
beoordelingen r
ON
g.id = r.reviewer_id AND g.max_date = r.datum_tijd order by g.max_date DESC ';
?>
Quote:
waardoor ik het veld datum_tijd niet meer hebt maar wel datum en tijd los van elkaar.
Waarom zou je de datum en tijd los op willen slaan ipv gecombineerd in een datetime veld?
Indeed. Daarnaast kun je het formatteren (en splitsen) van deze DATETIME prima buiten je query (in PHP zelf) regelen?
Zat ik later ook aan te denken, scheelt ook weer tabellen door het bij eentje te houden. Ik gebruikte vooral vaak de datum dus om dan steeds die datetime te splitsen vond ik een beetje vervelend maar qua logica is het denk idd beter om enkel een datetime te hebben.