我必须在DB中执行SELECT操作。由于我想缩小搜索结果的范围,我想知道是否应该使用嵌套的SELECT或使用JOIN操作?
我想在桌面上进行双重搜索。我没有成功尝试过这个:
$receive_listings = mysql_query('SELECT *
from show_detail
WHERE ch_id="0140.zee.in" IN ('SELECT *
FROM show_detail
WHERE `date_column` BETWEEN `2010-08-17` AND `2010-08-18`')'
) or die("ERROR: $receive_by_show_id.".mysql_error());
抛出错误:
Parse error: syntax error, unexpected T_VARIABLE in /Applications/XAMPP/xamppfiles/htdocs/play/browse-channels-shows.php on line 17
我想知道JOIN操作是否能更有效地完成这个技巧?
答案 0 :(得分:1)
由于其他人已经解决了您的解析错误,您最终会遇到第二个错误,因为您的查询不正确。
我假设您尝试在两个日期之间获取项目并与ch_id匹配:
SELECT * from show_detail WHERE ch_id="0140.zee.in" AND (`date_column` BETWEEN `2010-08-17` AND `2010-08-18`')
答案 1 :(得分:1)
此处的所有答案都未能显示Double引号不能用于包围值。你必须使用单引号。
$receive_listings = mysql_query("SELECT *
from show_detail
WHERE ch_id='0140.zee.in' IN (SELECT *
FROM show_detail
WHERE `date_column` BETWEEN '2010-08-17' AND '2010-08-18')") or die("ERROR: $receive_by_show_id. ".mysql_error());
应该是MySQL和PHP的正确版本。
答案 2 :(得分:1)
这是你的查询被重写为更具可读性。
$query <<<EOL
SELECT *
FROM show_detail
WHERE ch_id = "0140.zee.in" IN (
SELECT *
FROM show_detail
WHERE `date_column` BETWEEN '2010-08-17' AND '2010-0818'
);
EOL;
您显然在show_detail表中有多个列,但您在子查询中选择了所有列。这是非法的语法。子查询必须返回最多1个值(如果它用于相等性测试(... WHERE field = (SELECT someval FROM...))
),或者一个列,如果它在IN
子句中使用。如果其他所有内容都正确,您的查询仍会返回ERROR 1241 (21000): Operand should contain 1 column(s)
。
除非你有一些完全疯狂的东西,你不需要子查询来做这件事,你只需要一个AND条款,就像CFreak在他的回答中所说的那样。
答案 3 :(得分:0)
$receive_listings = mysql_query('SELECT * from show_detail WHERE ch_id="0140.zee.in" IN (SELECT * FROM show_detail WHERE `date_column` BETWEEN `2010-08-17` AND `2010-08-18`)') or die("ERROR: $receive_by_show_id.".mysql_error());
我认为可能需要这样。