2012-02-06 2 views
0

Извините, ребята. Я очень новичок в mysql, но мне нужна помощь в получении и объединении данных из 2 таблиц.Групповые данные из 2-х таблиц в mysql

table_a 

ID | TITLE | CONTENT | DATE 

table_b 

ID | POST_ID | IMAGE 

Вот мой код

$query = "SELECT table_a.*, table_b.IMAGE FROM table_a 
LEFT JOIN table_b 
     ON table_a.ID = table_b.POST_ID 
     ORDER BY table_a.DATE"; 
$mysql_result = mysql_query($query); 

$result = array(); 
while ($row = mysql_fetch_assoc($mysql_result)) { 
    $result[] = $row; 
} 
print json_encode($result); 

Однако, для тех, кто в записи TABLE_A, которые получили более чем 1 изображение, моя JSON продублированы СОДЕРЖАНИЯ с различными изображениями.

Есть ли какие-либо методы для объединить IMAGE с тем же ID в одну запись?

Спасибо за помощь!

+0

Что вы подразумеваете под «объединением изображения с тем же идентификатором в одну запись»? Я подозреваю, что у вас есть несколько изображений с разными идентификаторами, но для одного и того же POST_ID - следовательно, вы возвращаете несколько записей. Какое поведение вы хотите достичь? Какие результаты вам нужно получить, если у вас несколько изображений для одного и того же сообщения? –

+0

Спасибо за ваш ответ Aleks. В результате мне нужно что-то вроде [{«ID»: «1», «TITLE»: «Hello World», «DATE»: «2011-08-10», «CONTENT»: «Я новичок». "IMAGE": "a.jpg, b.jpg, c.jpg"}, { "ID": "2" ...}. Поэтому я могу отображать миниатюры и заголовок/контент, анализируя в jQuery. – louis

ответ

0

Если я правильно понял, вы хотите иметь все поля из table_a и только одно (возможно, комбинированное) поле from table_b.

Прежде всего, вы должны решить, что вы хотите получить, если у вас есть более одного изображения:

  • Только 1 изображение? Используйте MIN(table_b.IMAGE) или MAX(table_b.IMAGE) в , следующих за SQL
  • Все изображения разделены, например. запятая? Используйте GROUP_CONCAT(table_b.IMAGE SEPARATOR ',') или аналогичный в следующем SQL

Далее вы должны понять, что, чтобы получить только одну строку для каждого table_a.ID, вы должны группе table_a.ID, поэтому мы имеем

SELECT 
    table_a.*, 
    <function from above> AS image 
FROM table_a 
LEFT JOIN table_b 
     ON table_a.ID = table_b.POST_ID 
GROUP BY table_a.ID 
ORDER BY table_a.DATE 
+0

Спасибо за ваш ответ. BTW Я получил эту ошибку сейчас: Предупреждение: mysql_fetch_assoc() ожидает, что параметр 1 будет ресурсом, boolean задан в .... в строке52 – louis

+0

Что вы выбрали?Попытайтесь заполнить полный SQL –

+0

Пожалуйста, обратите внимание, в моем ответе была опечатка: Был «SEAPRATOR» (неправильный), который я сейчас исправил на 'SEPARATOR' –

-1

Вы можете возможно использовать РЕГИСТРИРУЙТЕСЬ вместо LEFT JOIN. Таким образом, она будет загружать только одну строку

или другим способом

положить GROUP BY a.ID перед заказом этого нужно просто BY ...

1

Вы можете использовать функцию GROUP_CONCAT для группы изображений в виде списка, разделенного запятыми в одном столбце вашей таблицы сообщений.

0

Я считаю, то, что вы потребность что-то вроде этого:

SELECT table_a.*, GROUP_CONCAT(table_b.IMAGE) FROM table_a 
LEFT JOIN table_b ON table_a.ID = table_b.POST_ID 
GROUP BY table_a.* 
ORDER BY table_a.DATE 

(Не уверен, что если вы должны изложить пункт GROUP BY, список имен полей по отдельности, или .* нотация будет приниматься здесь.)

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