Laatste records op datum tonen met GROUP BY

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan Vels

Johan Vels

25/02/2015 15:30:19
Quote Anchor link
Hallo allemaal,

Gebruik de volgende code om dubbele records te tonen, nu is het zo dat die altijd het eerste dubbele record toont. Zou graag willen dat die juist het laatste toegevoegde dubbele record toont. Eigelijk een soort van ORDER BY Datum in een COUNT? Hoe zou ik dit kunnen aanpakken?

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
16
17
18
<?php

$query
= "SELECT col1, col2, Datum, col4, col5, col6, COUNT(*) as totaal
FROM tabel
GROUP BY col6
HAVING totaal > 1
AND Datum > '2015-00-00'"
;

$result = mysql_query($query) or die ("Fout in query: $query. ".mysql_error());

while ($rows = mysql_fetch_array($result))
{
$col++;

echo "<td>"; echo $rows['col1'];  echo "</td>";  echo "<td>"; echo $rows['Datum'];  echo "</td>";  echo "<td>"; echo $rows['col6'];  echo "</td>";

mysql_free_result($result);

?>
Gewijzigd op 25/02/2015 16:33:19 door Johan Vels
 
PHP hulp

PHP hulp

28/04/2024 23:10:06
 
Thomas van den Heuvel

Thomas van den Heuvel

25/02/2015 16:05:32
Quote Anchor link
Er zal vast één intelligente query voor bestaan, maar als één query niet lukt, gebruikt er dan twee, of meer.

Oftewel: splits het probleem op:
1. verzamel de datums die dubbele resultaten opleveren
2. haal de laatste id's op die op deze datums geplaatst zijn (hier groepeer je dan op)
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

25/02/2015 19:33:35
Quote Anchor link
Volgens mij bedoelt TS het net andersom en zo ingewikkeld is het niet:
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
SELECT
    v.col1 as vaag1,
    v.col2 as vaag2,
    v.datum
FROM
    (SELECT
        col6,
        MAX(col1) col1
    FROM
        tabel
    WHERE datum >= '2015-01-01'
    GROUP BY col6) c
JOIN
    tabel v
    USING (col6, col1)

Aanname is dat col1 een AI kolom is.

Let op dat 2015-00-00 geen GELDIGE datum is, dat het stomme MySQL dit soort onzin fratsen toestaat doet er niet toe, op de database servers die ik beheer levert dit een foutmelding op (zoals het hoort)
Gewijzigd op 25/02/2015 19:35:48 door Ger van Steenderen
 
Johan Vels

Johan Vels

02/03/2015 11:37:44
Quote Anchor link
@thomas hoe zou ik dat code wise oplossen?
1. verzamel de datums die dubbele resultaten opleveren - Is in bovenstaande code toch al verzameld.
2. haal de laatste id's op die op deze datums geplaatst zijn (hier groepeer je dan op) - Hoe zou ik dit kunnen doen GROUP BY in een COUNT werkt namelijk niet.

@Ger heb je bovenstaande code geprobeerd maar dit levert enkel 1 dubbel record op en niet een lijst met alle dubbele records. col1 is een AI kolom.

Toevoeging op 02/03/2015 12:32:22:

Doe nu het volgende:

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
16
17
18
19
20
21
<?php

$query
= "SELECT col1, col2, Datum, col4, col5, col6, COUNT(*) as totaal
FROM (
SELECT t.* FROM (SELECT * FROM tabel ORDER BY Datum DESC) t GROUP BY col1
) AS t
GROUP BY t.col6
HAVING totaal > 1
AND Datum > '2015-01-01'
ORDER BY Datum DESC"
;

$result = mysql_query($query) or die ("Fout in query: $query. ".mysql_error());

while ($rows = mysql_fetch_array($result))
{
$col++;

echo "<td>"; echo $rows['col1'];  echo "</td>";  echo "<td>"; echo $rows['Datum'];  echo "</td>";  echo "<td>"; echo $rows['col6'];  echo "</td>";

mysql_free_result($result);

?>


Maar hij toont nog steeds het eerste gevonden dubbele record in plaats van de laatste gevonden dubbele record sorterende op datum.
Gewijzigd op 02/03/2015 12:43:08 door Johan Vels
 
Thomas van den Heuvel

Thomas van den Heuvel

02/03/2015 14:01:31
Quote Anchor link
Mogelijk wil je zoiets doen. Dit is min of meer een combinatie van wat ik voorstelde. Denk ik :).
 
Johan Vels

Johan Vels

02/03/2015 14:21:12
Quote Anchor link
Weet nou nog steeds niet hoe ik dit combineer met COUNT(*)
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

02/03/2015 15:03:21
Quote Anchor link
Johan Vels op 02/03/2015 11:37:44:
@Ger heb je bovenstaande code geprobeerd maar dit levert enkel 1 dubbel record op en niet een lijst met alle dubbele records. col1 is een AI kolom.

In dat geval doe je iets niet goed, ik heb hier een voorbeeld tabelletje gemaakt, en daar werkt het gewoon.
 
Thomas van den Heuvel

Thomas van den Heuvel

02/03/2015 15:32:50
Quote Anchor link
Wat is col6 precies?
 
Johan Vels

Johan Vels

03/03/2015 12:13:19
Quote Anchor link
Dank voor de sqlfiddle Ger. Hij is gelukt!
 



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.