SQLite子查询不能在PHP中工作

时间:2009-10-17 13:48:38

标签: php sql sqlite subquery

我正在使用一个简单的投票系统,使用php和sqlite。我预先构建了一个完整的场景,并在sqlite命令行中对其进行了测试,并在其中运行良好。 但是一个查询,它应该返回一个民意调查的所有可能答案以及投票给它的用户,它不再起作用了......

表格

CREATE TABLE polls (
 question CHAR(200)
);

CREATE TABLE choices (
 poll_id INTEGER(5),
 choice_text CHAR(200) 
);

CREATE TABLE votes (
 poll_id INTEGER(5),
 user_id INTEGER(5),
 choice_id INTEGER(5),
 PRIMARY KEY (poll_id, user_id)
);

CREATE TABLE users (
 name CHAR(100),
 pass CHAR(100),
 session CHAR(100)
);

PHP:

$query = "SELECT choices.rowid,choices.choice_text,
          (SELECT users.name FROM users WHERE votes.user_id=users.rowid) AS name
       FROM choices,polls LEFT OUTER JOIN votes ON choices.rowid = votes.choice_id
       WHERE polls.rowid=choices.poll_id AND polls.rowid='$pollid'";

$result = $db->arrayQuery($query, SQLITE_ASSOC);
echo json_encode($result);

返回:

Warning: SQLiteDatabase::arrayQuery() [sqlitedatabase.arrayquery]: no such column: votes.user_id in C:\Users\jan\Eigene Programme\xampplite\htdocs\cattle\vote\update.php on line 122
false

我尝试的第一件事是将子查询更改为

(SELECT users.name FROM users,votes WHERE votes.user_id=users.rowid) AS name

这样可行,但不会返回相同的结果:/ 我对这个查询进行了很长时间的修改,因为我不是专业人士,所以我想甚至可能会有更好的查询?

2 个答案:

答案 0 :(得分:2)

如果我正确理解您的查询,您可以避免使用子查询并使用连接。您也无需从polls中选择。

SELECT
    choices.rowid,
    choices.choice_text,
    users.name
FROM
    choices
    LEFT JOIN votes ON choices.rowid = votes.choice_id
    LEFT JOIN users ON votes.user_id = users.rowid
WHERE choices.poll_id = ?

答案 1 :(得分:1)

为什么要使用子查询,如果你已经加入了投票表?你可以将多个连接链接在一起。