我最近几天使用Cassandra。我正在使用PHPCassa库。
当我尝试使用以下代码时,它无法正常工作。
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'。
Keyspace详情
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 :(得分:8)
在cassandra你不能像往常一样查询'table'。您需要为可能要查询的每个列设置二级索引。
假设我们有一张桌子:
key | User | Age
----------+----------------
phpqa | Jack | 20
您可以直接在密钥上查询:
SELECT * FROM User WHERE key='phpqa';
但是要执行其他WHERE查询,您需要在WHERE子句中可用的列上使用二级索引。
您可以做些什么来使您的查询灵活变通:
答案 1 :(得分:4)
将'name'和'age'添加为辅助索引:
CREATE INDEX name_key on User( name );
CREATE INDEX age_key on User( age );
然后您应该可以使用select
声明。
了解更多here。
答案 2 :(得分:-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)