Php 通过ID从mysql中提取多行的最有效方法是什么?
我有一个典型的情况,我需要通过ID从mysql中提取多行。我只知道两种方法,但是我想知道是否有更好的方法来做到这一点?如果没有,那么我自己的方法中哪一种最整洁/最快/更好? 我的第一种方法:(~0.0003030) 我的第二种方法:(~0.0001040)Php 通过ID从mysql中提取多行的最有效方法是什么?,php,mysql,Php,Mysql,我有一个典型的情况,我需要通过ID从mysql中提取多行。我只知道两种方法,但是我想知道是否有更好的方法来做到这一点?如果没有,那么我自己的方法中哪一种最整洁/最快/更好? 我的第一种方法:(~0.0003030) 我的第二种方法:(~0.0001040) 我之所以考虑第二种方法,是因为它只使用1x查询。。然而,我坚信这两种方法都不完美,需要优化。据我所知,您不能进行这样的查询:其中id='2,3,4'实际上,您可以。实际上,操作员就是这样做的 SELECT * FROM tasks WHERE
我之所以考虑第二种方法,是因为它只使用1x查询。。然而,我坚信这两种方法都不完美,需要优化。据我所知,您不能进行这样的查询:
其中id='2,3,4'
实际上,您可以。实际上,操作员就是这样做的
SELECT * FROM tasks WHERE `id` IN (2, 3, 4)
我会成功的。您可以将数值或字符串值与IN运算符一起使用
正如约翰失败的例子,这里是一个正确的方法
$ids = array(3, 4, 6, 11);
$in = implode(",",$ids);
$sql = "SELECT * FROM tasks WHERE `id` IN ($in)");
为了经常使用,我会做一个占位符,这样调用整个表达式
$ids = array(3, 4, 6, 11);
$data = $db->getArr("SELECT * FROM tasks WHERE `id` IN (?a)",$ids);
为了回答评论中的问题,下面是我的db类的代码
function escapeString($value)
{
return "'".mysql_real_escape_string($value,$this->connect)."'";
}
function createIN($data)
{
if (!is_array($data))
{
throw new E_DB_MySQL_parser("Value for ?a type placeholder should be array.");
}
if (!$data)
{
throw new E_DB_MySQL_parser("Empty array for ?a type placeholder.");
}
$query = $comma = '';
foreach ($data as $key => $value)
{
$query .= $comma.$this->escapeString($value);
$comma = ",";
}
return $query;
}
getArr()方法与此没有直接关系,因为它只负责结果的类型 这句话的礼貌性不强。如果
$id
不是数组或是空的,会发生什么呢?@Kalle H。这是个好问题。语法错误。所以,你必须检查这两种情况。所以我在我的占位符处理程序中是这样做的。@NB,上校弹片不需要客气。因为99%的时候他是对的。每次和他一起跑步,我都能学到一些东西。@Schraspel上校:太好了!起初我有一些问题,但我已经解决了。我第一次尝试了id IN('$id')
->id IN('3,4,6,11')
,只得到了第一个结果(3)。但是,正确的是('3','4','6','11')中的id
。这种方法非常有效。我对你感激不尽。我在问题中添加了microtime()结果。您的方法结果是~0.0000930,这对我的项目(无论是旧项目还是即将推出的项目)都有很大影响。谢谢还要感谢约翰:)
$ids = array(3, 4, 6, 11);
$data = $db->getArr("SELECT * FROM tasks WHERE `id` IN (?a)",$ids);
function escapeString($value)
{
return "'".mysql_real_escape_string($value,$this->connect)."'";
}
function createIN($data)
{
if (!is_array($data))
{
throw new E_DB_MySQL_parser("Value for ?a type placeholder should be array.");
}
if (!$data)
{
throw new E_DB_MySQL_parser("Empty array for ?a type placeholder.");
}
$query = $comma = '';
foreach ($data as $key => $value)
{
$query .= $comma.$this->escapeString($value);
$comma = ",";
}
return $query;
}