MySQL: GROUP BY с внутренним соединением - PullRequest
0 голосов
/ 12 февраля 2012

Мне нужно получать похожие объявления с базы без повторения ... Этот код даст те же объявления, но с разными изображениями ...

"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] => Мобильные телефоны)

РАЗЛИЧИЕ В ФОКУСЕ

Ответы [ 2 ]

0 голосов
/ 12 февраля 2012

Группировка по не поможет вам, если отличное не помогло вам.Не понимая, почему вы получаете две записи, вы не сможете решить эту проблему.Таким образом, возникает вопрос: что делает эти две записи НЕ различными?

Возможно, проблема в том, что временные метки для этих двух записей различны;Таким образом, вы получаете два вместо одного.Возврат только тех значений, которые вам НУЖНЫ для показа объявления вместо. * И всех этих отметок времени.

В качестве альтернативы, вы можете получать несколько записей, поскольку у вас есть несколько записей в любой из объединенных таблиц, что вызывает второй экземплярэто объявление появляется из-за того, что у вас есть один ко многим где-то, чего вы не ожидали.

Distinct обычно удаляет такие вещи (или группирует по), но ТОЛЬКО если критерии, составляющие множество в одномОтношение-ко-многим исключено из оператора выбора.

Итак, запустите SQL, который вы разместили непосредственно для БД, и посмотрите, что делает запись неуникальной, а затем спросите, нужно ли вам возвращать этот столбец?Если нет, то исключая это, решит вашу проблему.

0 голосов
/ 12 февраля 2012

Я бы сказал, что вы должны GROUP BY по названию продукта. Тем не менее, я не знаю, получите ли вы желаемое изображение тогда. мне нужно больше информации о ваших таблицах-структурах.

...