J'essaie d'afficher une liste de magasins avec chacun 3 articles aléatoires de leur magasin, s'ils ont 3 annonces ou plus, et qui font de la publicité active. J'ai 3 tables : une pour les boutiques - "Shops", une pour les annonces - "Listings" et une qui suit les annonceurs actifs - "AdShops".
En utilisant l'instruction ci-dessous, les listes renvoyées sont aléatoires, mais je n'obtiens pas exactement 3 listes (lignes) par magasin.
SELECT AdShops.ID, Shops.url, Shops.image_url, Shops.user_name AS shop_name,
Shops.title, L.listing_id AS listing_id, L.title AS listing_title,
L.price as price, L.image_url AS listing_image_url, L.url AS listing_url
FROM AdShops INNER JOIN
Shops ON AdShops.user_id = Shops.user_id INNER JOIN
Listings AS L ON Shops.user_id = L.user_id
WHERE (Shops.is_vacation = 0 AND Shops.listing_count > 2 AND
L.listing_id IN
(SELECT TOP 3 L2.listing_id
FROM Listings AS L2
WHERE L2.listing_id IN
(SELECT TOP 100 PERCENT L3.listing_id
FROM Listings AS L3
WHERE (L3.user_id = L.user_id)
)
ORDER BY NEWID()
)
)
ORDER BY Shops.shop_name
Je suis perplexe. Quelqu'un a-t-il une idée sur la façon de résoudre ce problème ?
La solution idéale serait un enregistrement par magasin avec les 3 listes (et les données associées) en colonnes et non en lignes - est-ce possible ?