用where子句连接3个表

时间:2017-12-05 01:54:32

标签: php mysql

此查询使用3个表执行三个JOIN操作。但是我不明白......我试图输出回声中的所有行,但我运气不好。

Mysql表列:

tours
------
titlu_slider | desc_slider | poza_slider | poza_articol | pret

tours_review 
----------
name | time_added | review_text

tours_overview
------------
descriere | titlu_box1 | desc_box1 | titlu_box2 | desc_box2 | titlu_box3 | desc_box3 | titlu_box4 | desc_box4

Php代码:

<?php 
 $db = mysqli_connect("localhost", "root", "fidodido", "antonytravel");
 $q = mysqli_query($db,"SELECT * FROM tours  INNER JOIN tours_review INNER JOIN tours_overview  WHERE id = ".$_GET['id']."");

while ($row = mysqli_fetch_assoc($q)) {
$titlu_slider=$row['titlu_slider'];
$desc_slider=$row['desc_slider'];
$poza_slider=$row['poza_slider'];
$poza_articol=$row['poza_articol'];
$pret=$row['pret'];
## Review table
$name_review=$row['name'];
$time_added=$row['time_added'];
$review_text=$row['review_text'];
## Overview table
$descriere=$row['descriere'];
$titlu_box1=$row['titlu_box1'];
$desc_box1=$row['desc_box1'];
$titlu_box2=$row['titlu_box2'];
$desc_box2=$row['desc_box2'];
$titlu_box3=$row['titlu_box3'];
$desc_box3=$row['desc_box3'];
$titlu_box4=$row['titlu_box4'];
$desc_box4=$row['desc_box4'];

    echo '<section class="parallax_window_in" data-parallax="scroll" data-image-src="'.$poza_slider.'" data-natural-width="1400" data-natural-height="470">
        <div id="sub_content_in">
            <div id="animate_intro">
                <h1>'.$titlu_slider.'</h1>
                <p>"'.$desc_slider.'"</p>
            </div>

        </div>';

需要一些帮助..谢谢。

3 个答案:

答案 0 :(得分:2)

你需要指定表格如何相互关联,这可能看起来像下面显示的on条件(只是猜测)

SELECT * 
FROM tours t
INNER JOIN tours_review trev ON t.id = trev.tour_id
INNER JOIN tours_overview tovr ON = t.id = tovr.tour_id
WHERE t.id = $whatever

然后你面临的问题是什么类型的加入,因为如果你没有评论的游览,那么你可能仍然想要列出它。对于这种类型的关系,您需要一个“外部联接”。

SELECT * 
FROM tours t
LEFT OUTER JOIN tours_review trev ON t.id = trev.tour_id
INNER JOIN tours_overview tovr ON = t.id = tovr.tour_id
WHERE t.id = $whatever

如果每个巡回赛都有一个“概述”,则可以保持“内部联接”

编辑:请注意,您需要使用表名或表别名为每个列引用添加前缀(我使用了表别名来缩短查询次数)。如果您不这样做,您的查询可能会失败,例如如果每个表都有一列id而您只是要求where id = 123,则查询将不知道要使用哪个表,并且查询会出错。

答案 1 :(得分:0)

INNER join如果有匹配的记录则显示记录。如果其他表中不存在,则使用OUTER join显示所有记录。

答案 2 :(得分:0)

您在查询中遗漏了一些内容。特别与链接表的字段有关。要做这些连接,最佳做法是命名每个表,然后在ON语句中使用该名称来加入表

所以

SELECT * FROM tours 
INNER JOIN tours_review
INNER JOIN tours_overview  
WHERE id = ".$_GET['id'].""

应该是:

SELECT * FROM tours AS t 
INNER JOIN tours_review AS r ON r.somefield = t.somefield  
INNER JOIN tours_overview AS o ON o.somefield = t.somefield  
WHERE id = ".$_GET['id'].""

如果MySQL不知道连接它们的是什么,它就无法连接表。