如果存在更新如何插入(没有唯一键)

时间:2013-09-20 16:06:08

标签: mysql sql

我有3张桌子(样本),没有关键限制
一个是FRUITTABLE,第二个是FRUITPRICE,第三个是COMBINATIONS
在FRUITTABLE中,我们插入正在销售的颜色(即香蕉绿或黄色),味道,
在FRUITPRICE,我们会插入多少件(如果适用的包装)和销售时间

这就是我创建组合的方式

SELECT FT.FRUITS,  FT.COLOR, FT.TASTE, COUNT(FP.SALES) AS TOTAL, FP.TIMESOLD
FROM FRUITSTABLE FT
JOIN FRUTSPRICE FP  ON FT.ID = FP.ID
WHERE FP.TIMESOLD BETWEEN '2013-12-01 11:00:00' AND '2013-12-01 12:00:00'
GROUP BY FT.FRUITS, FT.COLOR, FT.TASTE

在COMBINATIONS表格中,我们所做的是将它们分组并计数,这样我们就能看到每小时最有可能结果良好的水果组合

这些组合将在每个小时发生

让我们说

即:芒果,黄色,酸味,10点,3点PM 即:芒果,黄色,酸,12,下午4:00
即:芒果,黄色,酸,14,5:00 PM 即:芒果,黄色,酸,10,6:00 PM

所以evey小时,让我们说下午3点左右 我们插入
芒果,黄色,酸,下午1点,3点 然后另一位顾客在同一时间买了这个组合,所以数据将是
芒果,黄色,酸,2,3:00 PM

现在,我们组合插入它。但如果组合已经存在, 老实说,我不知道如何更新它.. 我们需要更新它让我们说每5分钟,也许我可以设法创建SP和EVENT 打电话给SP(希望这是正确的)

唯一的问题是我不知道如何: 选择,插入,如果存在(FT.FRUITS,FT.COLOR,FT.TASTE的组合相同)更新
如果我认为可能与否,请告诉我。
提前谢谢

PS。在某些情况下,我已经在重复密钥更新中使用了insert
PS。我们确定每小时的组合和总销售额(FP.SALES)(TIMESOLD)

编辑

PS替换也不适用
我也不能使用独特的钥匙的原因是因为它没用 因为每个小时都会发生这种情况..老实说,
我已经有了解决方案。但它不会每分钟都更新,
我的解决方案将每小时插入一次。
这样做的负面影响是网页上的记录不会是实时的
我需要弄清楚的是我怎么能做类似的事情 插入重复键更新(但不使用主键)
这样表格将被更新,记录将是实时的 如果它可以创建一个解决方法

抱歉,如果我必须多次编辑问题。我希望这个是有建设性的......谢谢你的帮助......

3 个答案:

答案 0 :(得分:1)

你可能正在寻找这个:

Insert to table or update if exists (MySQL)

OR:

您实际上可以将(FT.FRUITS,FT.COLOR,FT.TASTE)组合作为一个键,使它们可以单独拥有多个值,但表中会有它们的唯一组合。

答案 1 :(得分:0)

创建Compound Key http://en.wikipedia.org/wiki/Compound_key将是正确的解决方案。但是,如果您因任何原因无法创建密钥,请执行相反的操作:

UPDATE myTable SET [whatever goes here] WHERE FRUITS = [currentFruit] AND COLOR = [currentColor] AND TASTE = [currentTaste]

现在,使用您的编程语言并检索affected row count。如果它是1 - 你已经完成了。如果为0:您需要插入,因为没有与您的更新语句匹配的行。

答案 2 :(得分:0)

以防万一,如果您使用的是load data语句而不是insert(比如从csv或自定义分隔文件中读取)。您可以使用替换标志。

http://dev.mysql.com/doc/refman/5.1/en/load-data.html