怎样在mysql中的where后面用数组?
在perl 的一个cgi程序里,从网页的form中读到数组,比如说@aa="1 2 3 4 5"。然后要写一个查询mysql的语句
$query = "SELECT $items FROM $tables WHERE $condition ORDER by $sort";
我的$condition里想用@aa的值,就是说table.id=1 and table.id=2 and table.id=3 and table.id=4 and table.id=5
我这么写很笨,而且我实际的数组长度也不只是5,应该有好的办法吧?请给些指点。谢谢先! 用for循环进行搜索 你是说把query写在for里面,一次取一个吗?我也想到这个了,只是以为是不是mysql自己还有什么功能可以做得简单点,一次就全取了,如果你都这么说,那看来是没有别的办法了,谢谢! 如果标准的 SQL 规范语法支持,那么 mysql 就应该支持。 :wink: 什么意思?支持什么?我写的语句有问题吗?我没明白你的意思,能不能说清楚些呢?怎么写可以让select语句按where后面的一个数组给出结果?如果不是自己写循环的话。 我记得 SQL 标准不支持的~~ :? 不好意思,还是这个问题,我发现可以用占位符“?”来解决,但是又出现新的问题了。下面是我的代码
....
$dbh = DBI->connect("DBI:mysql:database=$db;host=$host", $user, $passwd, {RaiseError => 1} );
if ($dbh) {
$items = "main.main_id, main.main";
$tables = "main";
$conditions = "main.main_id=?"; #我这里用了一个问号,是占位符
$query = "SELECT $items FROM $tables WHERE $conditions";
$sth = $dbh->prepare($query);
foreach my $gg (@id) { #我要取的id都放在@id里了,用其中的值代替"?"
$sth->execute($gg); #然后可以在这里循环,把值赋上。
print "OK<br>\n"; #这里我测试是不是执行到了。
while ( my @row = $sth->fetchrow_array() ) {#输出找到的记录
print "@row<br>\n";
}
}
}
else {print "NO\n"}
$sth->finish();
$dbh->disconnect();
这是我从网上和书上找到的,看起来不错的方法,但可是呢? :-( 我的问题是为什么只能输出第一个id所查到的记录,后面几个id的记录都不能输出?在我测试的OK一行里,有3个id就可以输出3个OK,但是后面却不能输出3条记录,只有第一个记录能被顺利地找到并显示出来。请问能帮忙看出是哪句话写错了吗?是不是那个while有问题呢?谢谢!谢谢! SELECT $items FROM $tables WHERE table.id in(1,2,3,4,5) ORDER by $sort 谢谢!但是我的那些1,2,3,4,5是举例,实际上并不只有这几个值,而且也不是这几个值,所有的都存在@id里了,可不可以写成
SELECT $items FROM $tables WHERE table.id in @id ORDER by $sort
有这么写的吗? perl是什么我不懂,所以也不知道这个行不行。
我用的是PHP,form 传来的id 可以处理一下,比如你的"1 2 3 4 5" 变成 1,2,3,4,5
SELECT $items FROM $tables WHERE table.id in ({$id}) ORDER by $sort
php中是可以的。 没有google求证,请先体验了 :mrgreen: 谢谢各位,我找到我的问题了,我写的那段code没有什么问题,是其它地方出错了。总之非常感谢。以后有问题再给指教。
页:
[1]