我刚刚遇到了一个前所未有的问题。当我在phpmyadmin中尝试我的SQL语句时,一切都很好。但是,一旦我在使用MySQL的c应用程序中使用它,它只能在每个其他开始使用。此外,当我运行一次时,它会阻塞整个表格,然后表格不会返回任何结果,即使在phpmyadmin中也没有。
SQL如下:
SELECT watchedItems.aid, IF((watchedItems.maxBidPrice > 0.00), watchedItems.maxBidPrice, bidGroups.bidGroupPrice)
AS maxBidPrice
FROM watchedItems
LEFT JOIN bidGroups ON bidGroups.bidGroupID = watchedItems.bidGroupID
WHERE watchedItems.sniping = 1
AND watchedItems.deleted = 0
AND watchedItems.PID = 0
AND watchedItems.processRunning = 0
AND watchedItems.id = 1
在WHERE过滤掉所有内容之前,LEFT JOIN用NULL填充所有内容,这是否会以某种方式影响表(NULL指针)?或者IF声明是否错位?或者LEFT JOIN可能有问题?奇怪的是,如果我调整代码并且只使用:
SELECT watchedItems.aid, IF((watchedItems.maxBidPrice > 0.00), watchedItems.maxBidPrice, bidGroups.bidGroupPrice)
AS maxBidPrice
FROM watchedItems
LEFT JOIN bidGroups ON bidGroups.bidGroupID = watchedItems.bidGroupID
WHERE
watchedItems.id = 1
一切似乎至少在表面上起作用 - 我没有得到表格堵塞。也许我现在还在遗漏一些东西。
答案 0 :(得分:0)
试试这个
SELECT watchedItems.aid, IF((bigGroups.bigGroupID IS NOT NULL AND watchedItems.maxBidPrice > 0.00), watchedItems.maxBidPrice, bidGroups.bidGroupPrice)
> 0.00不保证有来自bigGroups的数据。
答案 1 :(得分:0)
确保where子句和maxBidPrice
中的所有列都有索引,否则请求将非常昂贵。 (除了列之外,phpMyAdmin表结构视图中还有一个按钮。)
它在phpMyAdmin中工作,因为它以静默方式将limit 50
添加到sql代码中。
如果maxBidPrice
可以为null,则可以使用COALESCE
:
IF((COALESCE(watchedItems.maxBidPrice, 0.00) > 0.00),
watchedItems.maxBidPrice, bidGroups.bidGroupPrice)
如果maxBidPrice
总是> 0,如果不是NULL,请使用IFNULL
:
IFNULL(watchedItems.maxBidPrice, bidGroups.bidGroupPrice)