[mysql] Left join en rand()

Pagina: 1
Acties:

  • Martine
  • Registratie: Mei 2002
  • Niet online
Hoi hoi,

Na enige tijd proberen en zoeken kom ik er niet echt meer uit.
Mijn bedoeling is om met een query gegevens van een item uit te lezen en meteen de foto's die daarbij horen.

In de tabel 'categorie_items' staat het item dat op het beeld komt, in de tabel 'fotos' staan alle foto's voor de items.

Het 'id' in 'categorie_items' is uniek, het veld 'itemid' in 'fotos' matchen met elkaar.

Het is mogelijk als er meer foto's bij een item staan, daarom zou ik graag met een query random de foto's uit willen lezen. Is dit mogelijk???


table: categorie_items
----------------------------------------
| id | catid | title | price | content |
----------------------------------------

table: fotos
---------------------
| itemid | fotoname |
---------------------


Dit is de query die ik momenteel heb, de 'fotos.fotoname' moet dus random uitgelezen worden.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT DISTINCT
    categorie_items.*,
    fotos.fotoname
FROM
    categorie_items
LEFT JOIN
    fotos
ON
    categorie_items.id = fotos.itemid
WHERE
    catid = '".$_GET['CatId']."'
GROUP BY 
    categorie_items.title

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Martine
  • Registratie: Mei 2002
  • Niet online
Dat snap ik, maar hij moet het item gewoon niet rand() sorteren, alleen de foto's.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Kun je een subquery gebruiken ? (MySQL >= 4.1), dan is zoiets het meest eenvoudige denk ik:

SQL:
1
2
SELECT categorie_items.*, (SELECT fotoname FROM fotos WHERE itemid = categorie_items.itemid ORDER BY RAND() LIMIT 1) as fotoname
FROM categorie_items


Nadeel is wel dat het performance technisch niet super is, immers de subquery wordt voor iedere rij in de resultset uitgevoerd.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 13-01 07:19
Je kunt meer dan 1 sorteervolgorde opgeven. Dus eerst sorteren op id en dan op rand()
ORDER BY categorie_items.id,RAND()