2016-04-28 2 views
1

Мне нужно знать, можно ли комбинировать результат INNER JOIN, не получая повторяющихся значений. Вот моя проблема:Объединение повторяющихся строк в INNER JOIN MySQL

У меня есть 2 таблицы:

product 
product_id, product_name, image 

product_price 
product_id, selling_price, mrp 

Когда я объединить обе таблицы с помощью INNER JOIN я получаю результаты в сочетании, как и ожидалось:

Для запроса:

SELECT `product`.`product_id`, `product`.`product_name`, `product`.`image`, 
     `product_price`.`selling_price`, `product_price`.`mrp` 
FROM `product` 
INNER JOIN product_price ON `product.product_id` = `product_price.product_id` 

Как и ожидалось, это прекрасно работает, и я получаю результат (vardump() php):

array (size=2) 
    0 => 
    array (size=6) 
     'product_id' => string '8' (length=1) 
     'product_name' => string 'product1' (length=8) 
     'image' => string '587d0e605fb52ed571f80a9e9d0d4cea.png' (length=36) 
     'selling_price' => string '100' (length=3) 
     'mrp' => string '110' (length=3) 
    1 => 
    array (size=6) 
     'product_id' => string '8' (length=1) 
     'product_name' => string 'product1' (length=8) 
     'image' => string '587d0e605fb52ed571f80a9e9d0d4cea.png' (length=36) 
     'selling_price' => string '200' (length=3) 
     'mrp' => string '220' (length=3) 

Теперь, как вы можете увидеть две строки содержат повторяющиеся столбцы product_id, PRODUCT_NAME, изображение, я думаю, если бы был способ избежать этой избыточности, а некоторые, что получить результат, как:

array (size=6) 
      'product_id' => string '8' (length=1) 
      'product_name' => string 'product1' (length=8) 
      'image' => string '587d0e605fb52ed571f80a9e9d0d4cea.png' (length=36) 
array (size=2) 
0 => 
      'selling_price' => string '100' (length=3) 
      'mrp' => string '110' (length=3) 

1 => 
     'selling_price' => string '200' (length=3) 
     'mrp' => string '220' (length=3) 

Спасибо , -Sreejith

+0

Да. Это простая манипуляция массивом (от одномерного до многомерного). – Strawberry

+0

использовать разные или группы –

+0

@Strawberry Я хочу, чтобы это было сделано в MySQL, я знаю, что могу сделать это с помощью php, но я искал, могу ли я использовать его по запросу :) –

ответ

0

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

product_id product_name image  selling_price mrp 
     8   product1  xxx.png  100   110 
     8   product1  xxx.png  200   220 
     9   product2  aaa.png  17   18 
     9   product2  aaa.png  22   24 

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

product_id product_name image  selling_price mrp 
     8   product1  xxx.png  100   110 
              200   220 

     9   product2  aaa.png  17   18 
              22   24 

с детализацией при каждом отдельном продукте.

Ответ Нет, только с одним запросом.

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

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

Системы отчетности, такие как Crystal Reports, Jasper или BIRT, хорошо выполняют преобразование этих прямоугольных наборов результатов в красиво представленные макеты.

+0

Итак, если я использую базу данных без SQL, например MongoDB, может быть, но не на MySQL, как правильно? –

+0

Правильно. SQL сделок в таблицах. –