【问题标题】:A lot of queries with "or"很多带有“或”的查询
【发布时间】:2012-08-27 10:53:10
【问题描述】:

我正在尝试将数据库从 MySQL 转换为 MongoDB,但我遇到了问题。我不知道查询应该如何查找 MongoDB。

   $hd='';
   $count = count($args[1]);
   for($i=0;$i<$count-1;$i++){
       $hd.="playerId='" . $args[1][$i] . "' OR ";
   }
   $hd.="playerId='".$args[1][$count-1]."'";
   $h1=mysql_query(sprintf("SELECT * FROM player where ".$hd));

有人知道怎么解决吗?

【问题讨论】:

  • 这就是为什么应该使用 DAL,例如 PDO。 :)
  • “如何解决”是什么意思?这看起来更像是一个重写请求,您自己之前没有尝试过。请参阅MongoDB queries 以首先阅读它,然后是相应的PHP manual section
  • 这只是对 SQL 的查询,而不是对 Mongo 的查询。你的问题是什么意思?此外,您正在使用易受攻击的代码,而且您很快就会被弃用 mysql_ 驱动程序。
  • 附带说明:您的 MySQL 查询可以通过列出 args 来改进:$list = implode(",", $args[1]) 然后将其放入带有in 子句的语句中:SELECT * FROM player where playerId in ($list)

标签: php mysql mongodb database


【解决方案1】:

您的问题类似于Mongo db select where in array of _id?

我对@9​​87654322@ 不太熟悉,但您可以使用IN() 语句而不是使用多个OR 语句应该使您的查询更具可读性:

$h1 = mysql_query(
    "SELECT * FROM player where playerId IN (" . implode(", ", $args[1]) . ")"
);

至于 MondoDB,我认为这应该可以为您提供所需的结果:

$m = new Mongo();
$db = $m->selectDB("database"); // your db
$mc = new MongoCollection($db, 'player');
$mc->find(
    array(
        'playerId' => array(
            '$in' => $args[1]
        )
    )
);

如果你发现一些语法错误,请不要拍我:)

【讨论】:

  • $in 不能那样工作...它是一个数组,如$in=&gt;$args
  • @Sammaye 正如我所说,我不是那种 MongoDB //edit: 我已经更改了代码 ;)
  • PHP 中的mysql_ 函数自 5.3.0 版起已被弃用。用户mysqli_.
  • @jurgemaister 我认为他只是在复制那里的 OP 知识
  • 我知道,但是当您提出更改建议时,例如将 OR 替换为 IN,为什么不继续更正 API 的使用?
【解决方案2】:

PHP - MongoDB Advanced Queries

$collection->find([
    'playerId' => ['$in' => [1, 2, 3]]
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 2018-07-24
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    相关资源
    最近更新 更多