1 foto bij product
Ik heb 2 tabbellen, een met producten en een met bijbehorende foto's. Ik heb nu de volgende SQL:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
product.productnummer,
product.productnaam,
product.productbeschrijving,
product.productprijs,
fotos.foto
FROM
product,
fotos
WHERE
fotos.productnummer = product.productnummer
AND
product.productaantal > 0
ORDER BY
product.productdatum
LIMIT
20
product.productnummer,
product.productnaam,
product.productbeschrijving,
product.productprijs,
fotos.foto
FROM
product,
fotos
WHERE
fotos.productnummer = product.productnummer
AND
product.productaantal > 0
ORDER BY
product.productdatum
LIMIT
20
Een product kan dus meerdere foto's hebben, nu wil ik dat hij maar 1 foto neemt maar met DISTINCT krijg ik dat niet voor elkaar.
Iemand enig idee hoe ik dit moet aanpakken?
Die geeft het totale gevonden foto's weer. Wat je dan kan doen is met PHP een random nummer aanmaken die niet hoger is dan het maximum foto's die net gevonden zijn.
Ja, maar dan heb ik 2 querys nodig en ik wilde het met 1 doen. Anders zou ik wel ORDER BY RAND() doen met LIMIT 1
Wat je misschien kan proberen is het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT
product.productnummer,
product.productnaam,
product.productbeschrijving,
product.productprijs,
fotos.foto
FROM
product,
fotos
WHERE
fotos.productnummer = product.productnummer
AND
product.productaantal > 0
ORDER BY
product.productdatum,
RAND(fotos.foto)
LIMIT
20
product.productnummer,
product.productnaam,
product.productbeschrijving,
product.productprijs,
fotos.foto
FROM
product,
fotos
WHERE
fotos.productnummer = product.productnummer
AND
product.productaantal > 0
ORDER BY
product.productdatum,
RAND(fotos.foto)
LIMIT
20
Ik denk niet dat dit zal werken, maar het is het proberen waard lijkt me.
Gewijzigd op 20/02/2011 19:10:11 door Ruben Portier
Ik zal het even duidelijker maken:
Tabel product:
Code (php)
1
2
3
4
2
3
4
productnummer productnaam productbeschrijving productprijs productdatum
1 uyg blabla 1.5 de datum
2 uhg blabla 10 "
3 gujh blabla 9.95 "
1 uyg blabla 1.5 de datum
2 uhg blabla 10 "
3 gujh blabla 9.95 "
Tabel fotos:
Code (php)
1
2
3
4
5
2
3
4
5
fotonummer productnummer foto
1 1 images/foto1.jpg
2 2 images/foto2.jpg
3 2 images/foto3.jpg
4 3 images/foto4.jpg
1 1 images/foto1.jpg
2 2 images/foto2.jpg
3 2 images/foto3.jpg
4 3 images/foto4.jpg
Nu krijg ik dus alle foto's te zien met beschrijving en naam enzo maar ik wil dus dat alleen alle producten er zijn met bij product 2 een random foto
Gewijzigd op 20/02/2011 19:16:53 door Vincent Huisman
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT
product.productnummer,
product.productnaam,
product.productbeschrijving,
product.productprijs,
fotos.foto
FROM
product,
fotos
WHERE
fotos.productnummer = product.productnummer
AND
product.productaantal > 0
AND
fotos.fotonummer = 1
ORDER BY
product.productdatum
LIMIT
20
product.productnummer,
product.productnaam,
product.productbeschrijving,
product.productprijs,
fotos.foto
FROM
product,
fotos
WHERE
fotos.productnummer = product.productnummer
AND
product.productaantal > 0
AND
fotos.fotonummer = 1
ORDER BY
product.productdatum
LIMIT
20
Nu zal hij altijd fotonummer 1 nemen. Of is dit niet wat je wilt?
Ik denk dat jij zeker een random foto wil weergeven die met het productnummer overeen komt?
Ruben Portier op 20/02/2011 19:20:20:
Ik denk dat jij zeker een random foto wil weergeven die met het productnummer overeen komt?
Dat is wat ik wil ja.
Veel succes!
Je kan jouw probleem oplossen met een sub select query. Eventueel kan jij het ook oplossen met een zgn. join. Het ligt er maar net aan wat jij makkelijker vindt, qua performance kan een sub select zelfs sneller zijn bij mysql, maar dat verschilt per situatie (is mijn ervaring).
SELECT
product.productnummer,
product.productnaam,
product.productbeschrijving,
product.productprijs,
(SELECT fotos.foto FROM fotos WHERE fotos.productnummer = product.productnummer LIMIT 1) AS foto
FROM
product
WHERE
product.productaantal > 0
ORDER BY
product.productdatum
LIMIT
20
bedankt gerard, het werkt