2014-02-01 2 views
0

Сначала я хотел бы поприветствовать всех Пользователей и извиниться за свой английский :). Я новый пользователь на этом форуме. У меня вопрос о MySQL-запросах. У меня есть таблица Элементы с let say 2 столбца, например itemsID и ItemsQty.Дублирование строк в одном запросе на MySql

itemsID ItemsQty 
11 2 
12 3 
13 3 
15 5 
16 1 

Мне нужно выбрать itemsID, ​​но дублировать столько раз, сколько указано в столбце ItemsQty.

itemsID ItemsQty 
11 2 
11 2 
12 3 
12 3 
12 3 
13 3 
13 3 
13 3 
15 5 
15 5 
15 5 
15 5 
15 5 
16 1 

Я попробовал этот запрос:

SELECT items.itemsID, items.itemsQty 

FROM base.items 

LEFT OUTER JOIN 
(

    SELECT items.itemsQty AS Qty FROM base.items 

) AS Numbers ON items.itemsQty <=Numbers.Qty 

ORDER BY items.itemsID; 

, но он не работает правильно. Заранее благодарим за помощь.

+0

у вас есть выбор? –

+0

Спасибо за ответы. Я не могу использовать «отличную», потому что мне нужен дубликат записей, но столько раз, сколько указано в столбцах itemsQty. Мне нужны специальные ярлыки для печати, поэтому мне нужно сказать 2 ярлыка из первой записи, 3 метки из второй записи и т. Д. – Lipaj

+0

просто сделайте это со сценарием - я ответил ниже - если вы укажете язык, и я его знаю, я могу настроить свой ответ (хотя мой псевдокод должен, вероятно, помочь вам, если вы запрограммировали его раньше) –

ответ

1

SQL ответ - Вариант 1

Вам нужно еще одна таблица называется numbers с числами от 1 до максимума для ItemsQuantity

Table: NUMBERS 

1 
2 
3 
4 
5 
...... 
max number for ItemsQuantity 

Тогда следующий ЗЕЬЕСТ будет работать

SELECT ItemsID, ItemsQty 
FROM originaltable 
JOIN numbers 
    ON originaltable.ItemsQty >= numbers.number 
ORDER BY ItemsID, number 

См. this fiddle -> вы всегда должны настраивать скрипку, как это, когда можете, это облегчает жизнь каждого!

код ответа - вариант 2

MySQL, вероятно, не будет делать то, что вы хотите «чисто» без второй таблицы (хотя некоторые из них умный человек может знать, как)

Что плохого делать это со сценарием?

Просто запустите SELECT itemsID, ItemsQty FROM table

Затем, когда цикл по результату вобще (псевдо-код, как не указано никакого языка)

newArray = array(); // new array 

While Rows Returned from database{ //loop all rows returned 

    loop number of times in column 'ItemsQty'{ 

      newArray -> add 'ItemsID' 


    } 


}//end of while loop 

Это даст вам новый массив

0 => 11 

1 => 11 

2 => 12 

3 => 12 

4 => 12 

5 => 13 

и т.д. .

+0

Спасибо вам большое! Первый вариант - отличное решение! – Lipaj

-1

попробовать это, чтобы получить различные значения из обеих колонок

SELECT DISTINCT itemsID FROM items 
UNION 
SELECT DISTINCT itemsQty FROM items 
1
Select DISTINCT items.itemsID, items.itemsQty From base.items left outer join (select items.itemsQty as Qty from base.items) As Numbers On items.itemsQty <=Numbers.Qty 
order by items.itemsID; 

Используйте DISTINCT для удаления дубликатов. Подробнее здесь - http://dev.mysql.com/doc/refman/5.0/en/select.html

+0

Спасибо за ответы. Я не могу использовать «отдельный», потому что мне нужен дубликат записей, но столько раз, сколько указано в столбцах itemsQty. Мне нужны специальные ярлыки для печати, поэтому мне нужно сказать 2 ярлыка из первой записи, 3 метки из второй записи и т. Д. – Lipaj

+0

А, да. Позвольте мне подумать – MustDie1Bit

0

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

  1. создать новый стол для этих изменений.
  2. Создайте процедуру mysql, которая задала строку в исходной таблице, добавьте новые строки в новую таблицу - http://dev.mysql.com/doc/refman/5.6/en/loop.html
  3. Запустите эту процедуру для каждой строки в исходной таблице.
+0

Спасибо за ответы. Мне нужны специальные ярлыки для печати, поэтому мне нужно сказать 2 ярлыка из первой записи, 3 метки из второй записи и т. Д. Я пытаюсь использовать для этого отчеты о кристаллах. Печать будет использоваться часто для выбранных записей, поэтому мне нужно простейшее решение. – Lipaj

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