我正在尝试为我的mysql数据库选择故事,其中author变量等于名称列表。
我基本上有一个名单列表,我想用它来确定要讲的故事。
$names = "name1 name2 name3 name4"
$get_stories = mysql_query("SELECT * FROM glnce_stories WHERE author = '$names' ORDER BY id DESC");
我知道这不是正确的方法,但我正在寻找一些解决方案,以便我可以打破这个列表,以便我可以从$names
变量中的作者那里得到它
谢谢!
答案 0 :(得分:3)
如果您无法更改$names
变量的格式,则应该有效:
$names = 'name1 name2 name3 name4';
$names = '"' . implode('","', explode(' ', $names)) . '"';
$get_stories = mysql_query('SELECT * FROM glnce_stories WHERE author IN(' . $names . ') ORDER BY id DESC');
答案 1 :(得分:2)
逗号分隔名称然后 使用“WHERE author in(”。$ names。“)”;
答案 2 :(得分:1)
你应该像这样使用WHERE field in (list)
:
$names = "'name1', 'name2', 'name3', 'name4'";
$get_stories = mysql_query("SELECT * FROM glnce_stories WHERE author in ($names) ORDER BY id DESC");
因此,您的查询应如下所示:SELECT * FROM glnce_stories WHERE author in ('Bob', 'Steve', 'Andrey', 'Mike', 'Jenna')
重写您的代码如下:
$names = "name1 name2 name3 name4";
$names = "'".implode ("','", array_map('mysql_real_escape_string', explode(' ', $names))."'";
$get_stories = mysql_query("SELECT * FROM glnce_stories WHERE author in ($names)");
答案 3 :(得分:0)
如果您想要懒惰,可以使用FIND_IN_SET()
。您只需将名称列表转换为以逗号分隔的字符串:
$names = "name1,name2,name3,name4";
mysql_query("SELECT * FROM stories WHERE FIND_IN_SET(author, '$names')"
这可能比OR
条件列表更容易,或者为IN
子句准备正确的字符串列表。 (您可以_real_escape_string整个逗号分隔列表,而不是每个名称。)