1
SELECT 
    * 
FROM `catalog_webdesign_products` t 
INNER JOIN tbl_member_registration t1 ont.userid=t1.fld_loginid 
WHERE 1 
    AND t1.fld_member_category_level<9 
    AND t.product_img IS NOT NULL  
ORDER BY RAND() LIMIT 5

このクエリでは、一意のユーザー ID を持つ行が必要です。「ユーザー ID によるグループ化」も試しましたが、null 値の product_img が結果セットに含まれています。

4

2 に答える 2

2

はい、使用できますGROUP BY userid。しかし、あなたのクエリはここで間違っているようです

   INNER JOIN tbl_member_registration t1 on t.userid=t1.fld_loginid
                                           ^------------------------space here

これを試して

  SELECT 
  * 
  FROM `catalog_webdesign_products` t 
  INNER JOIN tbl_member_registration t1 on t.userid=t1.fld_loginid 
  WHERE  t1.fld_member_category_level<9 
  AND t.product_img IS NOT NULL  
  group by userid
  ORDER BY RAND() LIMIT 5

編集:

 SELECT 
  * 
  FROM (select * from `catalog_webdesign_products` where product_img IS NOT NULL) t 
  INNER JOIN tbl_member_registration t1 on t.userid=t1.fld_loginid 
  WHERE  t1.fld_member_category_level<9 
  group by t.userid
  ORDER BY RAND() LIMIT 5
于 2013-01-10T11:06:39.447 に答える
0

パフォーマンスを向上させるには、t1 の条件を結合ステートメントに移動する必要があります。問題は、間違った JOIN 条件である可能性があります。INNER JOIN の代わりに LEFT JOIN を試してください。

結合の詳細: http://www.w3schools.com/sql/sql_join.asp

SELECT * 
FROM `catalog_webdesign_products` t 
LEFT JOIN tbl_member_registration t1 
ON (t.userid = t1.fld_loginid AND t1.fld_member_category_level < 9)
WHERE t.product_img IS NOT NULL 
GROUP BY t.userid 
ORDER BY RAND() LIMIT 5
于 2013-01-10T11:42:06.273 に答える