2016-02-18 6 views
1

У меня есть две таблицы,Я хочу, чтобы объединить две таблицы, чтобы получить результат

1.Orders, 2.items.

1.Orders Скелет

+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(11)  | NO | PRI | NULL | auto_increment | 
| name | varchar(50) | NO |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 

2.Items Скелет

+----------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+----------+-------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| order_id | int(11)  | NO | MUL | NULL |    | 
| name  | varchar(50) | NO |  | NULL |    | 
| price | int(11)  | NO |  | NULL |    | 
+----------+-------------+------+-----+---------+----------------+ 

записей:

1.Orders Таблица с данными

+----+--------+ 
| id | name | 
+----+--------+ 
| 1 | Order1 | 
| 2 | Order2 | 
| 3 | Order3 | 
+----+--------+ 

2.items Таблица с Данные

+----+----------+---------+-------+ 
| id | order_id | name | price | 
+----+----------+---------+-------+ 
| 1 |  1 | Mobile1 | 25000 | 
| 2 |  1 | Mobile2 | 30000 | 
| 3 |  1 | Mobile3 | 6500 | 
| 4 |  2 | Mobile4 | 10000 | 
+----+----------+---------+-------+ 

Я хочу, чтобы получить предметы, которые имеющие такой же ORDER_ID,

Select id[Orders], order_id[items], name[items]1, name[items]2, name[items]3... 

Предложения Pls ...

+0

Вы хотите каждое имя в качестве колонки? или все имена в виде одного столбца, разделенного запятой? – sagi

+0

Это недопустимый синтаксис SQL. – Barmar

+0

Я не думаю, что это возможно, потому что вы (или mysql) не знаете, сколько строк оно будет извлекать во время выполнения запроса. Сначала вам нужно получить все данные и использовать любой язык программирования, чтобы печатать их любым способом. – rhavendc

ответ

2

кажется, что вам нужно получить доступ к таблице items, чтобы получить то, что вам нужно только.

SELECT order_id, GROUP_CONCAT(name SEPARATOR ', ') item_names 
FROM items 
GROUP BY order_id; 
+0

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

+0

Тогда вам понадобятся другие методы для преобразования строк в столбцы. U можно искать в StackOverflow, и уже есть решения. Но сложнее. –

0

я получаю решение только известное число полей ....

ряд Колонна:

ШАГ: 1

select @orderID:=order_id, 
@name:=GROUP_CONCAT(name) item_names, 
@price:=GROUP_CONCAT(price) item_price 
from item group by order_id limit 1; 

ВЫВОД:

+----------+-------------------------+------------------+ 
| order_id | item_names    | item_price  | 
+----------+-------------------------+------------------+ 
|  1 | Mobile1,Mobile2,Mobile3 | 25000,30000,6500 | 
+----------+-------------------------+------------------+ 

ШАГ: 2

select @orderID, 
SUBSTRING_INDEX(SUBSTRING_INDEX(@name, ',', 1),',',-1) as Name1, 
SUBSTRING_INDEX(SUBSTRING_INDEX(@price, ',', 1),',',-1) as Price1, 
SUBSTRING_INDEX(SUBSTRING_INDEX(@name, ',', 2),',',-1) as Name2, 
SUBSTRING_INDEX(SUBSTRING_INDEX(@price, ',', 2),',',-1) as Price2, 
SUBSTRING_INDEX(SUBSTRING_INDEX(@name, ',', 3),',',-1) as Name3, 
SUBSTRING_INDEX(SUBSTRING_INDEX(@price, ',', 3),',',-1) as Price3; 

ВЫВОД:

+----------+---------+--------+---------+--------+---------+--------+ 
| @orderID | Name1 | Price1 | Name2 | Price2 | Name3 | Price3 | 
+----------+---------+--------+---------+--------+---------+--------+ 
|  1 | Mobile1 | 25000 | Mobile2 | 30000 | Mobile3 | 6500 | 
+----------+---------+--------+---------+--------+---------+--------+ 
Смежные вопросы