【问题标题】:SQLite subquery not working in PHPSQLite 子查询在 PHP 中不起作用
【发布时间】:2009-10-17 13:48:37
【问题描述】:

我正在使用 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

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

【问题讨论】:

    标签: php sql sqlite subquery


    【解决方案1】:

    如果我正确理解您的查询,您可以避免使用子查询并使用联接。你也不需要从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 = ?
    

    【讨论】:

    • 谢谢,就是这样! (不敢相信我的尝试比“专业”解决方案更难看:))
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多