0

我有一个 JavaScript 程序,如果你输入“让我们谈谈”或类似的东西,它会进入它的问题功能,从问题表中向用户提问。它只问没有被问到的问题。

我已经设置了 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”,这是一个很好的观点,因为除非实际提出问题,否则我可能不会填写“问题”表。最好只是有一个问题表,然后在回答问题后填写问题表。

我正在使用的答案是:

 $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代码:PHP文件中的SQL查询需要修复

4

4 回答 4

1

我认为这会奏效

SELECT q.Question FROM questions q 内连接 questionasked qa ON q.QID=qa.qid WHERE qa.asked='N'

于 2013-01-11T05:35:08.023 回答
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
于 2013-01-11T05:45:05.430 回答
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'
于 2013-01-11T05:46:09.503 回答
0

我认为如果您查看具有或多或少相同主题的 PHP 问题,应该可以解决此问题。

问候

马丁

于 2013-01-11T12:42:00.887 回答