繁体   English   中英

用where子句连接3个表

[英]join 3 tables with where clause

该查询对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 
 $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>';

需要一些帮助。

您需要指定表格之间的关联方式,看起来像下面所示的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则查询将不知道要使用哪个表,并且该查询将出错。

如果有匹配的记录,则INNER join将显示记录。 如果其他表上不存在该记录,请使用OUTER连接显示所有记录。

您在查询中遗漏了一些东西。 与链接表的字段特别相关。 要进行这些联接,最佳实践是命名每个表,然后在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不知道连接表的方式,则无法连接表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM