2014-02-13 4 views
0

У меня есть проблемы с этим присоединиться ...объединения двух таблиц выдают 8

Вот мои 2 таблицы, добавляет и adds_filters

adds_filters structure: 

addfilterid 
addid 
filterid 

    data the table look like this: 
    addfilterid  addid  filterid  
    1    31  65 
    2    31  158 
    3    32  109 
    4    32  145 



adds structure 

addid 
addtitle 
addtext 



data the table look like this: 
addid addtitle  addtext 
31  test   test 
32  test2  test2 

Один дополнительный может иметь множество фильтров. Я хочу получить все фильтры, которые находятся в add_filters, и отображать результаты из добавления таблиц. У меня есть следующий запрос ...

SELECT * , af.filterid, af.addid 
FROM `adds` AS a 
INNER JOIN `adds_filters` AS af ON a.addid = af.addid 
LIMIT 0 , 30 

В таблице добавляет, у меня есть 9 записей. Вышеприведенный запрос возвращает 11 результатов. Я хотел бы получить 9 записей, и если один добавить есть более одного фильтра, которые будут отображаться в одной строке ... hos я могу это сделать?

С уважением, Джон

+0

Какой "один" должны быть показаны на той же строке? – gvee

+0

Используйте 'group by' и' group_concat' – senK

+0

Я бы хотел добавить с id 31, например, чтобы показать мне, что имеет фильтры 65 и 158, например ... – user2417624

ответ

1

использование

SELECT a.* , GROUP_CONCAT(DISTINCT af.filterid) 
FROM `adds` AS a 
JOIN `adds_filters` AS af ON a.addid = af.addid 
GROUP BY a.addid 
LIMIT 0 , 30 
+0

этот запрос производит неправильное количество записей и отображает [BLOB - 11 B] в поле: GROUP_CONCAT (af.filterid, '-', af.addid) – user2417624

+0

вы можете повторить его сейчас? Я его отредактировал – marcosh

+0

привет ... еще такой же результат – user2417624

1

Глядя на ваш запрос 11 записей появляется тобе правильный результат, потому что один дополнительный имеет более одного фильтра. Итак, если у каждого добавления есть хотя бы один фильтр, а некоторые из них два или более, результат будет более 9 строк.

Это мое объяснение, но, возможно, вы хотели бы сделать что-то еще?

Мой вопрос, почему вы ожидаете 9 строк?

+0

Я не ожидал, я хотел бы получить 9 записей, с фильтрами, включенными в эту строку, как-то, если это возможно. – user2417624

+0

с ответом, который я написал, вы получаете 1 строку для каждого добавления и в заголовках столбцов filtername, и для каждого появления фильтра есть 1 – user2969649

0

Вы можете попробовать это.

Возможно, он приближается к вашим пожеланиям.

TRANSFORM Count(adds_filters.filterId) AS sumOffilterId 
SELECT adds.addid, adds.addtitle, adds.addtext 
FROM adds INNER JOIN adds_filters ON adds.addid = adds_filters.addid 
GROUP BY adds.addid, adds.addtitle, adds.addtext 
PIVOT adds_filters.filterId; 

ADDID addtitle AddText 109 145 65 158

31 тест тест 1 1

32 test2 test2 1 1

+0

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «TRANSFORM Count (added_filters.filterId) AS sumOffilterId SELECT adds.addid, добавляет:« В строке 1 есть то, что я получаю – user2417624

+0

Хмм, mysql не поддерживает Pivot , – user2969649

+0

http://stackoverflow.com/questions/9117521/mysql-pivot-table-head-scratcher. эта ссылка относится к статье о том, как реализовать сводную таблицу в MySql – user2969649

Смежные вопросы