所以我要获取 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/