MySQL:GROUP BY与INNER JOIN

时间:2012-02-12 14:07:00

标签: mysql join group-by

我需要从基座获取类似广告而不重复...此代码会提供相同的广告,但会有不同的图片...

"SELECT DISTINCT a.*, ct.cityname as cityname, UNIX_TIMESTAMP(a.timestamp) AS timestamp, UNIX_TIMESTAMP(a.createdon) AS createdon, UNIX_TIMESTAMP(a.expireson) AS expireson,p.picfile as picfile,cat.catid,cat.catname as catname,scat.subcatname as subcatname, UNIX_TIMESTAMP(feat.featuredtill) AS featuredtill $xfieldsql
            FROM $t_ads a   
                INNER JOIN $t_subcats scat ON scat.subcatid = a.subcatid
                INNER JOIN $t_cats cat ON scat.catid = cat.catid
                    INNER JOIN $t_cities ct ON a.cityid = ct.cityid
                LEFT OUTER JOIN $t_adpics p ON a.adid = p.adid AND p.isevent = '0'
                LEFT OUTER JOIN $t_adxfields axf ON a.adid = axf.adid
                LEFT OUTER JOIN $t_featured feat ON a.adid = feat.adid AND feat.adtype = 'A'
            WHERE a.subcatid = $subcatid 
                AND a.cityid = $cityid 
                AND $visibility_condn_admin 
                AND a.adid != ".$_GET['adid']." 
                ".$similar_jobs_where."
                ".$similar_jobs_order."
                LIMIT ".constant("SIMILAR_JOBS_LIMIT");

我想,我必须在某个地方写一个GROUP BY,但在哪里?

FETCH_ARRAY:

Array ( [adid] => 7965 [adtitle] => Iphone 3gs 32gb [addesc] => Text. [area] => м.Улица академика янгеля [cityname] => Москва [timestamp] => 1327927914 [createdon] => 1327875932 [7] => 1359411932 [expireson] => 1359411932 [8] => 4f25b94c483c75f062cd1d573.jpg [picfile] => 4f25b94c483c75f062cd1d573.jpg [9] => 1 [catid] => 1 [10] => Сотовая связь [catname] => Сотовая связь [11] => Мобильные телефоны [subcatname] => Мобильные телефоны )

Array ( [adid] => 7965 [adtitle] => Iphone 3gs 32gb [addesc] => Text. [area] => м.Улица академика янгеля [cityname] => Москва [timestamp] => 1327927914 [createdon] => 1327875932 [7] => 1359411932 [expireson] => 1359411932 [8] => 4f25b94cddab6daa6806c5a56.jpg [picfile] => 4f25b94cddab6daa6806c5a56.jpg [9] => 1 [catid] => 1 [10] => Сотовая связь [catname] => Сотовая связь [11] => Мобильные телефоны [subcatname] => Мобильные телефоны)

在PICFILE中的差异

2 个答案:

答案 0 :(得分:0)

我会说你应该GROUP BY产品名称。 但是,我不知道你是否得到了想要的图像。因为我需要更多关于你的表结构的信息。

答案 1 :(得分:0)

如果分离对你没有帮助,分组将不会帮助你。如果不理解为什么你得到两条记录,你将无法解决这个问题。所以问题就变成了:这两个记录的区别是什么?

问题可能是这两个记录的时间戳不同;因此你得到两个而不是一个。只返回您需要显示广告而不是。*和所有这些时间戳的值。

或者,您可能会获得多个记录,因为您在任何已连接的表中都有多个记录,导致该广告的第二个实例出现,因为您在某个地方有一个您不期望的地方。

区别通常会删除此类内容(或分组),但仅限于在一对多关系中生成多个关系的条件从select语句中排除。

所以运行你直接针对数据库发布的SQL,看看是什么让记录不唯一,然后问你是否需要返回该列?如果没有,那么排除它将解决您的问题。