此查询使用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>';
需要一些帮助..谢谢。
答案 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不知道连接它们的是什么,它就无法连接表。