Hey mensen,

Ik heb 3 tabellen:


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

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.
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 :-/
Aha, dan moet je dus eerst kijken naar de gemiddelde uit de schaap_rates tabel:

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
Ja, dit werkt! Bedankt! :)
@niek en Blanche

Het kan denk ik ook met een JOIN:


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)
@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:

SELECT t1.kolom
FROM t1, t2
WHERE t1.id = t2.t1_id


SELECT t1.kolom
FROM t1
INNER JOIN t2
ON t1.id = t2.t1_id
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.
Het is inderdaad net wat je gewend bent en zelf fijner vindt. Beide manieren zijn juist en kunnen prima gebruikt worden.

Reageren