php - 使用内连接从第三个表中仅获取 1 行

标签 php mysqli prepared-statement

所以我要获取 3 个表:

问题、答案和成员。

这工作得很好,但问题是,我只想获得每个问题的第一行答案。因此,如果一个问题有 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;

关于php - 使用内连接从第三个表中仅获取 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54144334/

相关文章:

javascript - 在 OpenCart 中组合多个 CSS 或 JS 文件

php - 在 mysql 中选择一个以单词开头的句子,而不是后面跟着另一个单词

php - 使大型 Mysqli 插入更高效

java - 带 HashMap 的PreparedStatement

php - 准备好的语句返回 False

php - 使用准备好的语句插入 CURRENT_TIMESTAMP

php - 将所有图像加入到其相关页面

php - 表格未显示在 HTML 数据库中

php - 使用 doctrine 2 进行批处理 INSERT IGNORE 的最有效方法

javascript - 无法在模态中携带正确的行值