从mysql中选择它不等于其他表中的行

时间:2013-07-10 00:30:55

标签: php mysql

我正在做一个foreach循环,并选择与该部分名称相等的每一行。但是,我还需要显示所有不等于任何部分名称的结果。下面是我的代码中选择行等于节名称的部分。

$result2 = mysqli_query($con, "SELECT * FROM sections ORDER BY `order`");
$sectionnames = array();
while($row = mysqli_fetch_array($result2)) {
    $sectionnames[] = $row['sectionname'];
}

foreach ($sectionnames as $sectionname) {
    $result = mysqli_query($con,"SELECT * FROM faq WHERE section = '$sectionname' ORDER BY `order`");

4 个答案:

答案 0 :(得分:4)

你的意思是这样的:

SELECT * FROM `faq` WHERE `section` NOT IN (SELECT `sectionname` FROM `sections`)

会选择所有faq项目,这些项目没有与sections表格中任何sectionname共享名称的部分?如果没有那么也许juergen发布的是你需要的。有点不清楚你的目标是什么,所以请随意澄清,我会更新。

答案 1 :(得分:2)

我认为应该是,

$result = mysqli_query ($con, "SELECT * FROM faq WHERE section NOT IN 
                        (SELECT sectionname FROM sections)");

答案 2 :(得分:1)

您可以使用left join获取1个查询中的数据

SELECT * 
FROM sections s
left join faq f on f.section = s.sectionname
ORDER BY s.`order`, f.`order`

答案 3 :(得分:1)

SELECT section FROM Faq
    LEFT JOIN Sections 
       ON Faq.section = Sections.sectionname
 WHERE Sections.sectionname IS NULL