2013-03-15 21 views
6

私は最後の数日Cassandraを使用しています。私はそのためにPHPCassaライブラリを使用しています。Cassandra(CQL)select文の 'where'が機能しない

次のコードを使用しようとしているとき、正しく動作しません。何も返さない

require_once('phpcassa/connection.php'); 
require_once "phpcassa/columnfamily.php"; 

// Create new ConnectionPool like you normally would 
$pool = new ConnectionPool("newtest"); 

// Retrieve a raw connection from the ConnectionPool 
$raw = $pool->get(); 

$rows = $raw->client->execute_cql_query("SELECT * FROM User WHERE KEY='phpqa'", cassandra_Compression::NONE); 

echo "<pre>"; 
print_r($rows); 
echo "<pre>"; 

// Return the connection to the pool so it may be used by other callers. Otherwise, 
// the connection will be unavailable for use. 
$pool->return_connection($raw); 
unset($raw); 

その、私はまた、次の

$rows = $raw->client->execute_cql_query("SELECT * FROM User WHERE age='32'", cassandra_Compression::NONE); 
$rows = $raw->client->execute_cql_query("SELECT * FROM User WHERE name='jack'", cassandra_Compression::NONE); 

を照会しようとしている。しかし、私は正しい答え与え

$rows = $raw->client->execute_cql_query("SELECT * FROM User", cassandra_Compression::NONE); 

そのを試みたときに、すべての行を表示します。 「WHERE」の使い方を教えてください。

あなたが列名として予約語を使用している

鍵空間詳細

Strategy Class:  org.apache.cassandra.locator.SimpleStrategy 
Strategy Options: None 
Replication Factor: 1 

Ring 

    Start Token: 6064078270600954295 
    End Token: 6064078270600954295 
    Endpoints: 127.0.0.1 
+0

「DESCRIBE USER KEYSPACE」の出力は何ですか? – ethrbunny

+0

「年齢」と「名前」はインデックスに登録されていますか? – ethrbunny

+0

いいえ、インデックスされていません。 –

答えて

8

。照会したい列ごとに2次索引を設定する必要があります。

SELECT * FROM User WHERE key='phpqa'; 

しかし、クエリを使用して、列のあなたの2次索引を必要とするだろうWHERE他を実行するために:

key  | User | Age 
----------+---------------- 
phpqa | Jack | 20  

あなたがキーに直接問い合わせることができます:

は、私たちがテーブルを持っていると言いますWHERE句で利用可能にしたい

あなたが望む方法であなたのクエリを柔軟にするためにどのような操作を行うことができます。上記のように

  1. Secondary indexes
  2. コンポジット列をキーとして使用します。クエリーしたいカラムが2〜3つしかない場合は、this articleのコンポジットキーの使用方法とタイミングの詳細を読んでください。ここにはphpcassaに実装する方法のリンクがあります。セカンダリインデックスとして
+0

はい私は理解しました、ここでは「phpqa」は私にとってKeynameです。 –

+0

KEYのインデックスを作成する必要はありますか? –

+1

@ phpqa.in WHERE句にAgeカラムを設定したいとします(SELECT * FROM user WHERE age = 12'のようにAGEカラムにインデックスを付ける必要があります)AGEとNAMEを必要とする場合は、 –

-3

:通常どおり、あなただけの「テーブル」を照会カントカサンドラで

http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

$raw->client->execute_cql_query("SELECT * FROM User WHERE KEY='phpqa'", 
cassandra_Compression::NONE) 
+2

cassandraに関する投稿はありませんか? MySQLではなく。 – ethrbunny

+0

はいそれはカサンドラについてです。 Mysqlについてではありません –

4

追加 '名前' と '年齢':

CREATE INDEX name_key on User(name); 
CREATE INDEX age_key on User(age); 

は、その後、あなたの selectの文(複数可)を使用することができるはずです。

続きを読むhere

+0

ありがとうKEYに別のインデックスを追加する必要がありますか? –

+0

これはスムーズに正しくなるはずですか?SELECT * FROM User WHERE key = 'phpqa';しかし、それを占うことはありません –

+0

データを見ずには知りません。 – ethrbunny

関連する問題