取多个领域一次
目前我的查询看起来像取多个领域一次
$stmt = $this->db->prepare('SELECT `body` FROM `messages` WHERE `id`=? AND `status'='success');
$stmt->bind_param("i", $msgid);
$rc = $stmt->execute();
$stmt->bind_result($message);
$stmt->fetch();
$stmt->close();
比方说,$msgid
是阵列(1,2,5,7)。是否有可能获取所有body
,status
字段其中id是1,2,5,7一次和合并所有body
年代到由空格分隔一个变量?如果是,我该怎么办?
有GROUP_CONCAT
- 下面的代码应该做你需要的与PDO。
$values = array(1, 2, 5, 7);
$parameters = implode(',', str_split(str_repeat('?', count($values)));
$stmt = $this->db->prepare("
SELECT
GROUP_CONCAT(body SEPARATOR ' ') as gbody
FROM
messages
WHERE
id IN($parameters)
AND status='success'
");
$stmt->execute($values);
$res = $stmt->fetch();
echo $res['gbody'];
$stmt->close();
@ $ ValueCount = implode(',',array_fill(0,count($ values),'?'));';-) – 2012-01-19 11:01:28
@ Col.Shrapnel:为什么array_fill会有帮助? :) – rasmusx 2012-01-19 11:28:49
它会为你节省4行。四是因为在你当前的代码中你必须在循环之前添加'$ valueCount ='';'。所以,使用array_fill它将是一行而不是5。 – 2012-01-19 11:41:44
不知道这是可能的参数,但它很容易与内置SQL:
$imp=implode(',',$msgid);
"SELECT `body`, `status` FROM `messages` WHERE `id` IN (0$imp)"
的0后,开括号帮助您在的$ MSGID的障碍是一个空数组。
这是假设is_numeric($ MSGID [$ i])是所有有效$我真的,或者你失去了你的数据库...
你能编辑我提供的代码吗? – heron 2012-01-18 13:49:53
其实阅读我的答案的第一行会告诉你,我的解决方案不能使用参数。所以编辑你的代码不是一种选择。因为懒得阅读而下调是不礼貌的。 – 2012-01-18 13:52:27
没有,有地在语句没有占位符。 您必须编写一个简单的程序,它必须生成(?,?,?)
字符串才能添加到查询中,然后将您的数组绑定到此查询。
好,它竟然是在一次问题:
- 如何查询多个条件
- 如何使用预处理语句
- 如何建立这样一个查询数据库取多行
- 如何在一个中取多个字段
但是似乎你不必短期答案,但书(或者更确切地说,二 - 基本的PHP和MySQL的基础之一),这里有供您参考
- 使用报表的答案。 SQL语句
WHERE id IN(1, 2, 5, 7)
将查询数据库中的所有id。 - 正如我上面写的,创建一个小程序,以产生
(?,?,?)
声明,用数组元素的?
匹配数号码。比平常的方式。 - 我相信,execute()的手册页确实包含了一个获取多行的例子。我总是参考自己的例子手册。
- SQL函数group_concat()可以做到这一点。
select group_concat(body SEPARATOR ' ')
将选择你所有的身体在一排
是否可以将所有表作为数组提取,然后逐个获取确切的行? – heron 2012-01-18 13:51:14
这个问题是无关紧要的。您的数据库API可以让您确实获取多行。你确定你不知道该怎么做? – 2012-01-18 13:54:57
你的意思是像'... WHERE id IN(1,2,5,7)''? – Quasdunk 2012-01-18 13:46:00
@Quasdunk是的。假设'id 1'的'body'是'sample1'。 'id 2'是'sample2' ..等等。我想在一个变量中获得'sample1 sample2' – heron 2012-01-18 13:46:56
我有一个问题。虽然可以将所有的身体合并到一个字符串,那么状态呢?它必须是什么形式? – 2012-01-18 14:00:42