[英]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.