query probleem: items groeperen en ordenen op starttijd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Henk de Vries

Henk de Vries

29/08/2015 16:24:52
Quote Anchor link
Hallo,

Ik wil graag een history lijst maken met alle afgespeelde video's die in het verleden zijn afgespeeld.
Ik heb een query gemaakt die de video's ophaald, groepeerd en dit wordt allemaal netjes in de lijst gezet.
Er is alleen 1 probleem. Omdat dezelfde video meerdere malen kan worden afgespeeld, komt deze natuurlijk vaker voor in de history tabel. Deze heb ik dan met de query gegroepeerd, maar hij ordered alleen niet op de starttijd van de video.

De structuur van de tabel ziet er als volgt uit:

playlistId / videoId / startTime

en dit is de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$query = "SELECT V.title, count(V.title) as playedAmount FROM video AS V
          JOIN playlisthistory AS P ON V.id = P.videoId
          WHERE P.playlistId = $playlistId AND V.title LIKE '%$filterString%'
          GROUP BY V.title ORDER BY P.startTime ";


Omdat hetzelfde nummer meerdere malen voor kan komen, en verschillende starttijden heeft, kan ik deze dus niet meenemen in de groepering. weet iemand hier een oplossing voor?

De bedoeling is dus, alles groeperen zodat er geen dubbeling is, en vervolgens alles ordenen op starttijd.

Alvast bedankt
 
PHP hulp

PHP hulp

27/04/2024 02:14:20
 
Frank Nietbelangrijk

Frank Nietbelangrijk

29/08/2015 17:55:51
Quote Anchor link
Ik zou niet op v.title gaan vergelijken en dan tellen met count maar met id / video_id.
Hetzelfde geldt voor de groupby.

Je kunt met MAX(p.starttime) in combinatie met de GROUP BY de laatste view pakken. Dat lijkt me het meest logisch maar sorteren op played (aantal keren gestart) kan natuurlijk ook. (maak het zo dat de gebruiker kan kiezen waarop deze wil sorteren)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
    v.title, COUNT(v.video_id) AS played, MAX(p.starttime) AS latest_view
FROM
    video v
JOIN
    playlisthistory p
ON
    v.video_id = p.video_id
GROUP BY
    v.video_id
ORDER BY
    p.starttime ASC
 
Henk de Vries

Henk de Vries

29/08/2015 23:14:40
Quote Anchor link
Ik heb het al opgelost door de query hierin te veranderen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT V.title, V.videoId, V.id,count(V.title) as playedAmount
          FROM video AS V
          JOIN playlisthistory AS P ON V.id = P.videoId
          WHERE P.playlistId = $playlistId AND V.title LIKE '%$filterString%'
          GROUP BY V.title ORDER BY MAX(P.startTime) DESC
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/08/2015 13:19:26
Quote Anchor link
Ik zou niet op v.title gaan vergelijken en dan tellen met count maar met id / video_id.
 



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.