2009-10-17 2 views
0

저는 PHP와 sqlite를 사용하여 간단한 투표 시스템을 만들고 있습니다. 나는 전체 시나리오를 미리 빌드하고 sqlite 커맨드 라인에서 테스트했다. 더 이상 작동하지 않습니다, 설문 조사의 모든 가능한 답변과 투표 사용자를 반환해야합니다 그러나 하나의 쿼리, ...PHP에서 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

쿼리를 올바르게 이해하면 하위 쿼리가 실행되지 않고 조인을 사용할 수 있습니다. 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 = ? 
+0

감사합니다. (내 시도가 "전문적인"솔루션에서 너무 추악하다는 것을 믿을 수 없다 :)) – Jan

1

왜 이미 투표 테이블에 가입 한 경우 하위 쿼리를 사용합니까? 여러 개의 조인을 함께 연결할 수 있습니다.

관련 문제