2016-05-30 2 views
0

Я пытаюсь отслеживать все изменения, которые произошли на моем столеКак получить несколько строк с помощью select?

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

Update Stocks 
Set stockOut = 100 
,TrackDate = '1/30/2016' 
,stockOnHand = stockOnHand - 400 
WHERE itemID = '4589-S'; 

и этот one.Both на другую дату.

Update Stocks 
Set stockOut = 200 
,TrackDate = '2/30/2016' 
,stockOnHand = stockOnHand - 400 
WHERE itemID = '4589-S'; 

Теперь я использовал этот запрос

SELECT 
[ItemID] 
     ,[ProdID] 
     ,[stockOnHand] 
     ,[stockIn] 
     ,[stockOut] 
     ,[TrackDate] 
from Stocks 
where TrackDate between '1/30/2016' and '5/30/2016' 

отслеживать изменения в пределах определенного промежутка date.But я только получаю результат только

Я Ожидая получите 2 результата, потому что я обновил эту таблицу в две разные даты.

+0

является то MySQL? если mysql, то я не вижу дату. –

+0

@AbhikChakraborty pardon? –

+0

Вы отметили вопрос 'mysql', а формат даты, который вы сохраняете, неверен. –

ответ

1

Вам нужны две таблицы,

STOCK & STOCK_HISTORY

При вставке/обновлении запасов, вы должны также создать новую запись в таблице STOCK_HISTORY. Столбцы этой таблицы должны быть как ID, STOCK_ID, ACTION (создавать, обновлять, удалять) и TIMESTAMP.

Таким образом, у вас нет бесполезной информации в таблице STOCK, и всякий раз, когда вы хотите, чтобы перечислить все изменения запаса вы делаете:

SELECT * FROM stocks s 
 
    JOIN stock_history sh ON sh.stockId = s.id 
 
    WHERE s.id = $stockId

+0

Итак ** История запаса ** - это как зеркало? Я сейчас получу эту идею. –

+0

Nope. Данные запаса находятся в таблице STOCK, данные, относящиеся к изменениям запасов, приведены в таблице запасов. Это разные данные, которые они обрабатывают – Borjante

+0

, поэтому в хранилище должно содержаться фондовый индекс, обновление (TimeStamp), запасы, запасы и запасы в руке? –

0

Запросы UPDATE изменяют существующие строки.

Запросы INSERT добавляют новые строки.

Оба ваших запроса обновления изменили ту же строку.

+0

Мне нужно было его обновить, потому что я добавляю акции. –

+0

Но он прав, только 1 строка обновлена, поэтому на выходе может быть только 1 строка. После его обновления старая версия больше не существует. – sagi

+0

@sagi, какой запрос я мог использовать, чтобы я мог просматривать старые версии, например, см. Отчеты о том, что происходит в течение определенного периода времени? –

0

Для архивирования каждого изменения, внесенного в таблицу, добавьте TRIGGER.
http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html

Триггер будет архивировать полный ряд или его части, написав его в другую таблицу в случае, если строка получает deletet или обновлен. Вы должны определить внутри TRIGGER-Definition, что именно происходит, когда строка изменяется и какие значения строки должны быть заархивированы.

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