2015-10-06 57 views
0

我已创建3个表格:播放列表,曲目列表,& xmlexport,我用它来存储我的播放列表。为避免复制播放列表中的任何项目,我使用从播放列表中插入的曲目列表&我将我的曲目列表的第一行插入到我的xmlexport中,然后导出曲目以.xml格式播放文件被我的播放器读取。每当这个过程发生时,我从音轨列表中删除一行,所以当表格播放最后一个项目时它变空&我需要运行一个查询来更新播放列表表格中的曲目列表。这是我一直在玩的东西,但它不能正常工作。如果行计数= 0运行查询

 INSERT INTO dms.test_trk 
     SELECT * FROM dms.test_ply 
     WHERE row_count() <= 0; 
+1

不知道如果我理解正确你的问题,但如果我有这听起来像你需要的是一个队列,而不是数据库。以redis lpush和rpop为例。 – e4c5

回答

1

同你说

INSERT INTO dms.test_trk 
SELECT * FROM dms.test_ply 
WHERE row_count() <= 0; 

究竟你希望发生什么?我会认为最后一次操作(即执行此语句之前的操作)的结果将与零进行比较,因此行将从test_ply中检索或不检索。

但是,您似乎认为row_count以某种方式告诉您test_trk中是否有记录。

这两种假设看起来都不对。我的测试表明,在启动INSERT时,row_count被重置为-1,因此您不能在INSERT语句中使用此函数。

什么你正在寻找取而代之的是一个简单的EXISTS子句:

insert into test_trk 
select * from test_ply where not exists (select * from test_trk); 
+0

当我运行“哪里不存在”它返回0行受到影响。我有这个工作在MS访问存储的功能(如果rst.recordcount <= 0然后运行查询)我只是想找到一种方法来完成这与MySQL。我需要创建一个函数还是有一个简单的SQL语句,将工作? – drs

+0

所有此声明所做的事情是在test_trk重新填充以防万一它为空。你不必在旁边做任何事;您不必额外计数记录。只要test_trk中至少有一个条目,只要test_trk完全为空,该语句就不会执行任何操作,语句将重新填充表。 –

+0

“哪里不存在”不适合我,但我今天再试一次,是的!它的工作!所以我非常感谢你的时间来看这个。 – drs

0

我想你需要一个存储过程,检查是否在test_trk COUNT(*)为0。如果是这样,运行:

INSERT INTO dms.test_trk 
SELECT * FROM dms.test_ply 

Thisthis应该让你在正确的轨道上。