QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3326|回复: 11

怎样在mysql中的where后面用数组?

[复制链接]
发表于 2005-6-7 16:30:20 | 显示全部楼层 |阅读模式
在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,应该有好的办法吧?请给些指点。谢谢先!
发表于 2005-6-7 18:01:11 | 显示全部楼层
用for循环进行搜索
回复

使用道具 举报

 楼主| 发表于 2005-6-7 18:05:48 | 显示全部楼层
你是说把query写在for里面,一次取一个吗?我也想到这个了,只是以为是不是mysql自己还有什么功能可以做得简单点,一次就全取了,如果你都这么说,那看来是没有别的办法了,谢谢!
回复

使用道具 举报

发表于 2005-6-7 18:21:51 | 显示全部楼层
如果标准的 SQL 规范语法支持,那么 mysql 就应该支持。
回复

使用道具 举报

 楼主| 发表于 2005-6-7 18:26:44 | 显示全部楼层
什么意思?支持什么?我写的语句有问题吗?我没明白你的意思,能不能说清楚些呢?怎么写可以让select语句按where后面的一个数组给出结果?如果不是自己写循环的话。
回复

使用道具 举报

发表于 2005-6-7 19:12:20 | 显示全部楼层
我记得 SQL 标准不支持的~~
回复

使用道具 举报

 楼主| 发表于 2005-6-13 15:04:42 | 显示全部楼层
不好意思,还是这个问题,我发现可以用占位符“?”来解决,但是又出现新的问题了。下面是我的代码

....
        $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有问题呢?谢谢!谢谢!
回复

使用道具 举报

发表于 2005-6-13 15:45:54 | 显示全部楼层
SELECT $items FROM $tables WHERE table.id in(1,2,3,4,5) ORDER by $sort
回复

使用道具 举报

 楼主| 发表于 2005-6-13 15:49:24 | 显示全部楼层
谢谢!但是我的那些1,2,3,4,5是举例,实际上并不只有这几个值,而且也不是这几个值,所有的都存在@id里了,可不可以写成

SELECT $items FROM $tables WHERE table.id in @id ORDER by $sort

有这么写的吗?
回复

使用道具 举报

发表于 2005-6-13 16:12:17 | 显示全部楼层
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中是可以的。
回复

使用道具 举报

发表于 2005-6-15 17:21:40 | 显示全部楼层
没有google求证,请先体验了
回复

使用道具 举报

 楼主| 发表于 2005-6-15 17:28:35 | 显示全部楼层
谢谢各位,我找到我的问题了,我写的那段code没有什么问题,是其它地方出错了。总之非常感谢。以后有问题再给指教。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-29 05:09 , Processed in 0.098710 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表