MySQL: GROUP BY with INNER JOIN



我需要在不重复的情况下从基础上获得类似的广告。。。这个代码会给出相同的广告,但有不同的图像…

"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 中的差异

我认为您应该按产品名称分组。然而,我不知道你当时是否得到了想要的图像。我需要更多关于你的表格结构的信息。

如果distinct对您没有帮助,Groupby将不会帮助您。如果不了解为什么你会得到两张唱片,你将无法解决这个问题。所以问题来了:是什么使得这两个记录不明显?

问题可能是这两个记录的时间戳不同;这样你就得到了两个而不是一个。只返回显示广告所需的值,而不是a.*和所有这些时间戳。

或者,您可能会得到多条记录,因为您在任何连接的表中都有多条记录导致该广告的第二个实例出现,因为您有一个一对多的记录,这是您没有预料到的。

Distinct通常会删除此类内容(或分组依据),但前提是一对多关系中的多个标准已从select语句中排除。

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

最新更新