exp*_*ert 1 php mysql nosql handlersocket
使用HandlerSockets时,是否可以指定我想从查询中接收哪些字段?
这是我的样本表
CREATE TABLE pushed_media
(
user_id BINARY(12) NOT NULL,
story_id BINARY(12) NOT NULL,
sent_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY ( user_id, story_id )
);
Run Code Online (Sandbox Code Playgroud)
查询它的PHP代码如下
$hs = new HandlerSocket($host, $port);
if (!($hs->openIndex(1, $dbname, $table, HandlerSocket::PRIMARY, 'user_id,story_id,sent_date')))
{
echo $hs->getError(), PHP_EOL;
die();
}
$user_id = pack('H*', substr(md5('ruslan'), 0, 24));
$story_id = pack('H*', substr(md5('story1'), 0, 24));
$retval = $hs->executeSingle(1, '=', array($user_id, $story_id), 1, 0);
Run Code Online (Sandbox Code Playgroud)
我需要的只是sent_date因为我已经知道其他两个价值观.是否有可能不再通过网络传输它们?
小智 5
您可以通过field在openIndex方法的参数中指定它们来指定要从查询中接收的字段.
正如你在这里看到的,这段代码:
<?php
$hs->openIndex(1, 'db', 'table', 'PRIMARY', 'k,v');
$ret = $hs->executeSingle(1, '>=', array('K1'));
var_dump($ret);
?>
Run Code Online (Sandbox Code Playgroud)
等效于以下SQL语句:
SELECT k,v FROM table WHERE k >= 'K1' LIMIT 1
Run Code Online (Sandbox Code Playgroud)
回到您的示例,如果您只想读取sent_date字段值:
$hs = new HandlerSocket($host, $port);
if (!$hs->openIndex(1, $dbname, $table, myHandlerSocket::PRIMARY, 'sent_date')) {
die($hs->getError());
}
$user_id = pack('H*', substr(md5('ruslan'), 0, 24));
$story_id = pack('H*', substr(md5('story1'), 0, 24));
$retval = $hs->executeSingle(1, '=', array($user_id, $story_id), 1, 0);
die("<pre>".print_r($retval,true)."</pre>");
Run Code Online (Sandbox Code Playgroud)
结果输出应该是这样的:
Array
(
[0] => 0
[1] => 1
[2] => 2013-02-01 22:18:39
)
Run Code Online (Sandbox Code Playgroud)
所述HandlerSocket的协议文档状态:
一旦发出'open_index'请求,HandlerSocket插件就会打开指定的索引并保持打开状态,直到关闭客户端连接.每个开放索引由<indexid>标识.如果<indexid>已经打开,则旧的开放索引将关闭.您可以打开<dbname> <tablename> <indexname>多次的相同组合,可能使用不同的<columns>.为了提高效率,尽量保持<indexid>小.
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |