组合表sql查询

时间:2013-01-11 05:25:04

标签: sql

我有一个JavaScript程序,如果你输入'let's talk'或者类似的东西,它会转到它的问题函数,它从问题表中询问用户的问题。它只询问没有问过的问题。

我已经设置了3个表。

(questions)            (people)                (questionasked)
QID  Question           PID   Person           QID PID  Asked   Answer   

1   What is life?        1  Lindsay           1     1   N       ''.
2   Do you know Kate J?  2  Kate              2     1   Y       'Yes, Kate is cool'.

对于有问题的表,存在QID和PID的组合主键,因此不会询问相同的问题两次。

有什么好方法可以提出问题。问题表可能有20多个问题。 给出查询的php文件的变量只是名称:name(用户名)。 例如

$query1 = "SELECT q.Question 
FROM questions q inner join questionsasked qa 
ON q.QID = qa.QID 
WHERE qa.Asked='N'";

我可以在这里添加另一个AND子句来检查

     questionsasked inner join people on PID = people.PID AND people.Person = $name  ?

上面的查询没有返回任何内容..仍然需要更多的SQL练习..我希望它返回结果中的第一个问题。

好的,我得到的答案主要是对vidyadhar的回答,并且还合并了来自JW的'OR qa.Asked IS NULL',这是一个好点,因为我可能没有填写'questionsasked'表,除非问题实际被问到。最好只有一个问题表,然后在问题得到解答时填写问题表。

我使用的答案是:

 $query1 = "SELECT q.Question 
 FROM questions q
 INNER JOIN questionsasked qa 
 ON q.QID = qa.QID 
 INNER JOIN peopleiknow p
 ON qa.PID = p.PID
 WHERE qa.Asked='N' OR qa.Asked IS NULL
 AND p.Person = '$name'"; 

欢迎进一步调整。

实际上我仍然遇到了这个问题,所以修改了表格,并在这个问题中显示了php代码:SQL query in PHP file in need of a fix

4 个答案:

答案 0 :(得分:1)

我认为这会有用

选择 q.Question 从问题q内连接问题qa ON q.QID = qa.qid 在哪里qa.asked ='N'

答案 1 :(得分:0)

SELECT  a.PID, f.Person,
        d.question
FROM
        (
            SELECT  a.PID, b.QID
            FROM    people a, questions b
        ) c 
        INNER JOIN questions d
            ON c.QID = d.QID
        INNER JOIN people f
            ON c.PID = f.PID
        LEFT JOIN questionasked e
            ON  c.QID = e.QID AND
                c.PID = e.PID
WHERE   e.Asked = 'N' OR e.Asked IS NULL

答案 2 :(得分:0)

在这种情况下,您可以使用INNER JOIN。请检查

SELECT Q.Question
FROM questions Q INNER JOIN questionasked A ON Q.QID=A.QID
    INNER JOIN people P ON A.PID=P.PID
WHERE A.QID= 'Question ID' AND
    A.PID='Person ID' AND
    A.Asked='Y'

答案 3 :(得分:0)

我认为如果你看看你的PHP问题或多或少有相同主题,就应该解决这个问题。

问候

马丁