2013-01-24 39 views
1

使用HandlerSockets時,我可以指定要從查詢中接收哪些字段嗎?使用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) 
); 

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); 

所有我需要的是sent_date,因爲我已經知道了另外兩個值。是否有可能不再通過網絡傳輸它們?

回答

5

您可以指定要通過簡單地openIndex方法的field參數指定它們從查詢得到的字段。
正如你可以閱讀here,此代碼:

<?php 
$hs->openIndex(1, 'db', 'table', 'PRIMARY', 'k,v'); 
$ret = $hs->executeSingle(1, '>=', array('K1')); 
var_dump($ret); 
?> 

等同於以下SQL語句:

SELECT k,v FROM table WHERE k >= 'K1' LIMIT 1 

回到你的例子,如果你想閱讀只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>"); 

由此產生的輸出應該是這樣的:

Array 
(
    [0] => 0 
    [1] => 1 
    [2] => 2013-02-01 22:18:39 
) 

HandlerSocket protocol documentation狀態:

一旦'open_index的要求發出後,HandlerSocket的插件打開 指定索引並保持開放,直到客戶端連接 關閉。每個開放索引由<indexid>確定。如果<indexid>爲 已經打開,則舊的開放索引將關閉。 您可以打開<DBNAME> <的tablename > <INDEXNAME> multple倍, 可能與不同<列>相同 組合。爲了提高效率,儘可能保持<indexid> 小。

+0

因此,使用'openIndex'實際上並不意味着我必須在這個列上有一個索引? – expert

+1

@ruslan是的,在openIndex調用中,您指定要使用的索引以及要讀取的字段,而在executeSingle調用中指定要提取的索引列值。有關openIndex調用的更多詳細信息,請參閱更新的答案。 – 2013-02-03 09:10:29

0

executeMulti怎麼樣?

$retval = $hs->executeMulti(array(
    array(1, '=', array($user_id), 1, 0), 
    array(2, '=', array($story_id), 1, 0), 
)); 
相關問題