【发布时间】:2017-11-05 21:29:15
【问题描述】:
我正在为 cassandra 使用这个驱动程序:https://github.com/datastax/php-driver
这是我用来创建表格的代码:
CREATE TABLE test.packages (
packageuuid timeuuid,
ruserid text,
suserid text,
timestamp int,
PRIMARY KEY (ruserid, suserid, packageuuid, timestamp)
);
然后我创建一个物化视图:
CREATE MATERIALIZED VIEW test.packages_by_userid
AS SELECT * FROM test.packages
WHERE ruserid IS NOT NULL
AND suserid IS NOT NULL
AND TIMESTAMP IS NOT NULL
AND packageuuid IS NOT NULL
PRIMARY KEY (ruserid, suserid, timestamp, packageuuid)
WITH CLUSTERING ORDER BY (packageuuid DESC);
这是我的 PHP 代码的 sn-p,它导致 502 bad gateway:
$session = $cluster->connect($keyspace);
$selectstmt = $session->prepare("SELECT suserid, susername, snickname, msg, savatar, timestamp FROM packages_by_userid WHERE ruserid IN (?, ?) AND suserid IN (?, ?) AND timestamp < ? LIMIT 40;");
$params = array('ruserid' => array($rid, $sid), 'suserid' => array($rid, $sid), 'timestamp' => $endtimestamp);
$options = array('arguments' => $params);
$future = $session->executeAsync($selectstmt, $options);
$result = $future->get();
我相信我把参数绑定到准备好的语句上搞砸了。在我的情况下,正确的方法是什么,因为我必须将多个值绑定到 ruserid 和 suserid?
感谢任何可以提供帮助的人。
【问题讨论】:
-
在我看来 ruserid IN (?, ?) AND suserid IN (?, ?) 不是有效的 CQL 语法。
-
如果我不使用准备好的语句并且在命令行中也可以正常工作
-
我想我理解了您的用例,您正试图从两个用户之间获取 packageuuid。环? packageuuid 是使用当前时间戳生成的吗?
-
是的,我正在尝试通过他们的 ID 获取两个用户之间发送的所有包的数据,并且 packageuuid 是从当前时间戳生成的。