alice_alice 发表于 2005-6-7 16:30:20

怎样在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,应该有好的办法吧?请给些指点。谢谢先!

涩兔子 发表于 2005-6-7 18:01:11

用for循环进行搜索

alice_alice 发表于 2005-6-7 18:05:48

你是说把query写在for里面,一次取一个吗?我也想到这个了,只是以为是不是mysql自己还有什么功能可以做得简单点,一次就全取了,如果你都这么说,那看来是没有别的办法了,谢谢!

jiangtao9999 发表于 2005-6-7 18:21:51

如果标准的 SQL 规范语法支持,那么 mysql 就应该支持。 :wink:

alice_alice 发表于 2005-6-7 18:26:44

什么意思?支持什么?我写的语句有问题吗?我没明白你的意思,能不能说清楚些呢?怎么写可以让select语句按where后面的一个数组给出结果?如果不是自己写循环的话。

jiangtao9999 发表于 2005-6-7 19:12:20

我记得 SQL 标准不支持的~~ :?

alice_alice 发表于 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有问题呢?谢谢!谢谢!

apnea 发表于 2005-6-13 15:45:54

SELECT $items FROM $tables WHERE table.id in(1,2,3,4,5) ORDER by $sort

alice_alice 发表于 2005-6-13 15:49:24

谢谢!但是我的那些1,2,3,4,5是举例,实际上并不只有这几个值,而且也不是这几个值,所有的都存在@id里了,可不可以写成

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

有这么写的吗?

apnea 发表于 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求证,请先体验了 :mrgreen:

alice_alice 发表于 2005-6-15 17:28:35

谢谢各位,我找到我的问题了,我写的那段code没有什么问题,是其它地方出错了。总之非常感谢。以后有问题再给指教。
页: [1]
查看完整版本: 怎样在mysql中的where后面用数组?