Topic met hoogste rating laten zien?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niek s

niek s

08/03/2007 18:51:00
Quote Anchor link
Hey mensen,

Ik heb 3 tabellen:

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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
mysql> DESCRIBE schaap_r;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(9)      | NO   | PRI | NULL    | auto_increment |
| tid     | int(9)      | NO   | MUL |         |                |
| datum   | datetime    | NO   |     |         |                |
| bericht | text        | NO   |     |         |                |
| naam    | varchar(50) | NO   |     |         |                |
| ip      | varchar(50) | NO   |     |         |                |
+---------+-------------+------+-----+---------+----------------+
6 rows in set (0.07 sec)

mysql> DESCRIBE schaap_t;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(9)       | NO   | PRI | NULL    | auto_increment |
| door    | varchar(20)  | NO   |     |         |                |
| datum   | datetime     | NO   |     |         |                |
| titel   | varchar(100) | NO   |     |         |                |
| bericht | text         | NO   |     |         |                |
| foto    | varchar(255) | NO   |     |         |                |
| ip      | varchar(50)  | NO   |     |         |                |
+---------+--------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)

mysql> DESCRIBE schaap_rates;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(9)      | NO   | PRI | NULL    | auto_increment |
| tid    | int(9)      | NO   | MUL |         |                |
| rating | int(1)      | NO   |     |         |                |
| ip     | varchar(50) | NO   |     |         |                |
+--------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)


Alleen nu wil ik de 10 topics (schaap_t) laten zien, die de hoogste rating hebben. Dit allemaal in 1 query. Ik kom er alleen neit uit :(

Iemand anders misschein wel?

Gr.
Niek
 
PHP hulp

PHP hulp

20/11/2024 10:33:10
 
Joren de Wit

Joren de Wit

08/03/2007 18:54:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
    schaap_t.titel
FROM
    schaap_t,
    schaap_rates
WHERE
    schaap_t.id = schaap_rates.tid
ORDER BY
    schaap_rates.rating DESC
LIMIT 0, 10

Niet getest, maar zoiets zal het worden.
 
Niek s

niek s

08/03/2007 19:06:00
Quote Anchor link
Dat werkt wel ongeveer, maar dat laat topics ook meerdere keren in het lijst voorkomen op de een of andere manier. Dan staat er eerst topic 5, dan 9, weer 9, weer 9, weer 9, weer 9, dan weer 5, weer 5, weer 5, en dan 6 :-/
 
Joren de Wit

Joren de Wit

08/03/2007 19:27:00
Quote Anchor link
Aha, dan moet je dus eerst kijken naar de gemiddelde uit de schaap_rates tabel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
    schaap_t.titel,
    AVG(schaap_rates.rating) AS gemiddelde
FROM
    schaap_t,
    schaap_rates
WHERE
    schaap_t.id = schaap_rates.tid
GROUP BY
    schaap_t.id
ORDER BY
    gemiddelde DESC
 
Niek s

niek s

08/03/2007 19:29:00
Quote Anchor link
Ja, dit werkt! Bedankt! :)
 
Robert Deiman

Robert Deiman

08/03/2007 19:31:00
Quote Anchor link
@niek en Blanche

Het kan denk ik ook met een JOIN:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
   schaap_t.titel
   AVG(schaap_rates.rating) AS gemiddelde
FROM
   schaap_t
OUTER_JOIN
   schaap_rates
ON
   schaap_t.id = schaap_rates.tid
GROUP BY
    schaap_t.id
ORDER BY
    gemiddelde DESC


Dit zou (uit mijn hoofd) ook moeten werken. (sorry, na die join tutorials heb ik de smaak een beetje te pakken)
 
Joren de Wit

Joren de Wit

08/03/2007 19:52:00
Quote Anchor link
@Robert: ik werk hier ook met een join, namelijk een INNER JOIN. Je kunt in INNER JOIN namelijk ook gewoon schrijven met een WHERE clause waarin je de foreign key aan de overeenkomstige uit de andere tabel koppelt.

Dus deze twee zijn hetzelfde:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT t1.kolom
FROM t1, t2
WHERE t1.id = t2.t1_id

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT t1.kolom
FROM t1
INNER JOIN t2
ON t1.id = t2.t1_id
 
Robert Deiman

Robert Deiman

08/03/2007 22:01:00
Quote Anchor link
Weet ik dat het op hetzelfde neer komt, ik vind zelf de inner join als je die zo uitschrijft altijd wat duidelijker, je ziet meteen dat de tabel gekoppeld wordt door dat er INNER JOIN (met mijn schrijfwijze) staat in de query. Het is inderdaad maar wat je zelf prettigeer vind werken.
 
Joren de Wit

Joren de Wit

08/03/2007 22:15:00
Quote Anchor link
Het is inderdaad net wat je gewend bent en zelf fijner vindt. Beide manieren zijn juist en kunnen prima gebruikt worden.
 



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.