【发布时间】:2011-06-21 10:31:04
【问题描述】:
我刚刚遇到了一个以前从未遇到过的问题。当我在 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 语句放错了位置?或者可能是左连接有问题?奇怪的是,如果我修改代码并且只使用:
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
至少从表面上看,一切似乎都有效——我没有遇到桌子堵塞的情况。也许我在这里仍然遗漏了一些东西。
【问题讨论】:
-
我会说它与您的 C 代码有关。那么你能发布你用来从查询中提取的代码吗?
-
我认为你可能是对的。我现在尝试了几种解决方案,但似乎没有任何效果。
-
你认为我应该将它单独发布在一个新线程中吗?
-
通过phpMyAdmin运行查询时,数据是否正确?看起来您可能会返回太多数据,这就是问题所在,而不是“如果”。为了验证这一点,您可以运行相同的连接/位置,但选择 * 而不是 IF 子句?