2013-07-24 3 views
-2

Я пытаюсь получить значения образуют две таблицы MySQL:MySQL, PHP извлечения данных из таблицы MySQL кратные

table1 = jid, name, lat, lng 

table2 = id, imgs, jid 

Моя проблема заключается в том, что вторая таблица может иметь 2 или больше деталей. Я хотел бы получить данные из двух таблиц в одном запросе. Можно сделать некоторые вещи, как:

id name lat lon imgs 
1 coco -122 210 1.jpg, 2.jpg, 3.jpg 

I судимой с Join, союза и :-(

+0

Да, возможно, можно запросить две таблицы. Но ваш вопрос непонятен, и никто не может помочь вам здесь, не зная точной проблемы. Добро пожаловать в SO, хотя. – akshayb

ответ

0

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

SELECT table1.id, table1.name, table1.lat, table1.lng, table2.imgs 
FROM table1 
    INNER JOIN table2 ON table2.jid = table1.jid; 

Это будет строить результат л икэ это

id name lat lon imgs 
1 coco -122 210 1.jpg 
1 coco -122 210 2.jpg 
1 coco -122 210 3.jpg 
2 late -100 270 1.jpg 
2 late -100 270 2.jpg 

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

+0

С MySQL можно фактически использовать 'GROUP_CONCAT()', чтобы получить все значения 'imgs' в одну строку. Тем не менее, неясно, имеет ли 'table2' несколько записей на изображение или все они хранятся в одной записи. – cdhowie

+0

@cdhowie Я хотел бы сказать, что я полностью забыл о 'GROUP_CONCAT()', но на самом деле я никогда не наткнулся на него раньше. Спасибо за информацию. Я ухожу прямо сейчас, чтобы поиграть с этим. – RiggsFolly

+0

Это изящно, но будьте осторожны, что это MySQL-ism, и я не нашел другого механизма базы данных, который поддерживает эту конструкцию. (PostgreSQL, например, позволяет создавать пользовательские агрегаты, поэтому вы можете реализовать его непосредственно в PostgreSQL, но он не поддерживается из коробки. Хотя он поддерживает 'array_agg()', который делает в основном одно и то же, массив вместо строки.) – cdhowie

0

Попробуйте этот запрос:

SELECT table2.id, table1.name, table1.lat, table1.lng, table2.imgs 
FROM table1 
INNER JOIN table2 
    ON table1.jid = table2.jid; 
+0

благодаря большому количеству cdhowie, и извините за мой английский, я сделал ваш sugestion, но я не могу присоединиться к списку изображений в таблице два. Поле: imgs имеет 2 или более изображений – allan

+0

@allan Покажите нам некоторые примеры данных, тогда не совсем понятно, почему этот запрос не сработает. – cdhowie

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