簡體   English   中英

使用內連接從第 3 個表中僅獲取 1 行

[英]Get only 1 row from 3rd table with inner join

所以我要獲取 3 個表:

問題、答案和成員。

這工作得很好,但問題是,我只想得到每個問題的第一行answers 因此,如果一個問題有 50 個答案,我只想顯示其中一個的片段。 我查看了子查詢和左連接,但它似乎不起作用。 我怎樣才能做到這一點?

$queryGQ = "SELECT 
    questions.q_id,
    questions.question,
    questions.description,
    questions.link,
    questions.m_id AS qMID,
    questions.timestamp,
    questions.linktitle,
    questions.answers,
    questions.upvotes,
    answers.a_id,
    answers.q_id AS qQID,
    answers.answer,
    members.m_id AS mMID,
    members.navn,
    members.avidaname
        FROM
    questions
        INNER JOIN
    answers ON answers.q_id = questions.q_id
        INNER JOIN
    members ON questions.m_id = members.m_id
        WHERE public = '1'
        ORDER BY questions.timestamp DESC LIMIT $TheLimit";

    if ($stmtGQ = $con->prepare($queryGQ)) {

        /* execute statement */
        $stmtGQ->execute();

        /* bind result variables */
        $stmtGQ->bind_result($q_id, $question, $description, $link, $qMID, $timestamp, $linktitle, $answers, $upvotes, $aAID, $qQID, $answer, $mMID, $navn, $avidaname);

        /* fetch values */
        while ($stmtGQ->fetch()) {
            //MAGIC HAPPENS
        }
    }

如果您想保留獲得最多贊成票的答案,那么您可以向子查詢添加另一個連接,它會為每個問題找到最受歡迎的答案。 然后,使用它來過濾您的結果集,使每個問題只有一個答案。

SELECT 
    q.q_id,
    q.question,
    q.description,
    q.link,
    q.m_id AS qMID,
    q.timestamp,
    q.linktitle,
    q.answers,
    q.upvotes,
    a.a_id,
    a.q_id AS qQID,
    a.answer,
    m.m_id AS mMID,
    m.navn,
    m.avidaname
FROM questions q
INNER JOIN answers a
    ON a.q_id = q.q_id
INNER JOIN
(
    SELECT q_id, MAX(upvotes) AS max_upvotes
    FROM answers
    GROUP BY q_id
) a2
    ON a.q_id = a2.q_id AND a.upvotes = a2.max_upvotes
INNER JOIN members m
    ON q.m_id = m.m_id
WHERE
    public = '1'
ORDER BY
    q.timestamp DESC;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM