2017-02-22 27 views
-2

我在MySQL中有两个表格,一个表格包含葡萄酒的详细信息,第二个表格包含具有链接到葡萄酒表格ID每个在盒子里的瓶子。MySQL JOIN查询连接基于多个单元格的表格并输出到PHP

例如, :

葡萄酒 .ID 请将.Name .Year 。说明

盒 .BoxID 请将.Name .Bottle1 .Bottle2 - > ... .Bottle12

所以如果我有一个有6个瓶子的葡萄酒盒,.Bottle1到.Bottle6的字段将包含葡萄酒桌上瓶子的ID。

我想在PHP是连接这两个表并输出运行SELECT查询在我的网页如下:

箱XXX “酒例2瓶” “瓶“酒例1瓶”酒示例3" 的 ‘酒范例4瓶’ ‘酒举例5瓶’ ‘酒example6’瓶

,如果盒子只有1瓶葡萄酒将显示

箱XXX “酒例1瓶”

- 编辑 -

我试图下面的代码是不工作...

<?php 
    session_start(); 
    include("dbconnect.php"); 
    $box_sql="SELECT a.* 
      FROM box a left join 
     WineID b1 on a.bottle1=b1.WineID left join 
     WineID b2 on a.bottle2=b2.WineID left join 
     WineID b3 on a.bottle3=b3.WineID left join 
     WineID b4 on a.bottle1=b4.WineID left join 
     WineID b5 on a.bottle1=b5.WineID left join 
     WineID b6 on a.bottle1=b6.WineID left join 
     WineID b7 on a.bottle1=b7.WineID left join 
     WineID b8 on a.bottle1=b8.WineID left join 
     WineID b9 on a.bottle1=b9.WineID left join 
     WineID b10 on a.bottle1=b10.WineID left join 
     WineID b11 on a.bottle1=b11.WineID left join 
     WineID b12 on a.bottle1=b12.WineID left join 
     where (b1.WineID is not null or 
       b2.WineID is not null or 
       b3.WineID is not null or 
       b4.WineID is not null or 
       b5.WineID is not null or 
       b6.WineID is not null or 
       b7.WineID is not null or 
       b8.WineID is not null or 
       b9.WineID is not null or 
       b10.WineID is not null or 
       b11.WineID is not null or 
       b12.WineID is not null)"; 
    if($box_query=mysqli_query($dbconnect, $box_sql)) { 
     $box_rs=mysqli_fetch_assoc($box_query); 
    ?> 
<h1><?php echo $box_rs['boxnumber']; ?></h1> 
    <?php do { ?> 
     <div class="item"> 
     <a href="index.php?page=item&stockID=<?php echo $box_rs['WineID']; ?>"> 
     <p><?php echo $box_rs['Name']; ?></p> 
     </a> 
     </div> 
     <?php 
     } while ($box_rs=mysqli_fetch_assoc($box_query)); 
     ?> 
    <?php 
    } 
    ?> 

------ ----- EDIT -----------

描述葡萄酒输出下面=

Field  Type   Null  Key  Default  Extra 
WineID  int(4)   NO  PRI  NULL auto_increment 
categoryID int(1)   NO  NULL  
Name  varchar(100) NO  NULL  
Winery  varchar(30) NO  NULL  
Year  varchar(4)  NO  NULL  
Country  varchar(20) NO  NULL  
Region  varchar(30) NO  NULL  
ABV   varchar(6)  NO  NULL  
bottlesize varchar(6)  NO  NULL  
Grape  varchar(100) NO  NULL  
Notes  varchar(2046) NO  NULL  
ReadyEst varchar(15)  NO  NULL  
Picture  varchar(100) NO  NULL  
Price  varchar(10)  NO  NULL  

DESCRIBE箱输出低于=

Field Type Null Key  Default  Extra 
boxID int(11)  NO PRI  NULL auto_increment 
boxnumber varchar(10)  NO  NULL  
year varchar(4) NO  NULL  
size varchar(2) NO  NULL  
bottle1  varchar(3) NO  NULL  
bottle2  varchar(3) NO  NULL  
bottle3  varchar(3) NO  NULL  
bottle4  varchar(3) NO  NULL  
bottle5  varchar(3) NO  NULL  
bottle6  varchar(3) NO  NULL  
bottle7  varchar(3) NO  NULL  
bottle8  varchar(3) NO  NULL  
bottle9  varchar(3) NO  NULL  
bottle10 varchar(3) NO  NULL  
bottle11 varchar(3) NO  NULL  
bottle12 varchar(3) NO  NULL  
+1

这篇文章没有显示任何研究,本网站并不是一个代码请求平台。有很多关于通过PHP运行MySQL查询的教程。这里有一个例子可以让你开始:https://www.w3schools.com/php/php_mysql_connect.asp – Daniel

+0

好吧,谢谢你。 – Chris

+0

对于其他人 - 我一直在尝试下面的查询这是返回错误\t $ box_sql =“SELECT A * \t \t \t从框中左连接 \t \t WineID B1上a.bottle1 = b1.WineID左加入 \t。 \t其中(b1.WineID不为空或... – Chris

回答

1

好吧,我有你的 “问题”

一个可能的解决方案试试这个结构:

酒桌上:

Field  Type   Null  Key  Default  Extra 
WineID  int(4)   NO  PRI  NULL auto_increment 
categoryID int(1)   NO  NULL  
Name  varchar(100) NO  NULL  
Winery  varchar(30) NO  NULL  
Year  varchar(4)  NO  NULL  
Country  varchar(20) NO  NULL  
Region  varchar(30) NO  NULL  
ABV   varchar(6)  NO  NULL  
bottlesize varchar(6)  NO  NULL  
Grape  varchar(100) NO  NULL  
Notes  varchar(2046) NO  NULL  
ReadyEst varchar(15)  NO  NULL  
Picture  varchar(100) NO  NULL  
Price  varchar(10)  NO  NULL  

箱表:

Field Type Null Key  Default  Extra 
boxID int(11)  NO PRI  NULL auto_increment 
boxnumber varchar(10)  NO  NULL  
year varchar(4) NO  NULL  
size varchar(2) NO  NULL  

Wine_In_Box表:

Field Type Null Key  Default  Extra 
id  int(11)  NO PRI  NULL auto_increment 
boxID int(11)  NO   NULL  
wineID int(11)  NO   NULL  

现在你会做的是使一些葡萄酒,然后创建一个盒子。 为了填补你插入Wine_In_Box表像这样的框:当你想检索框中的内容

INSERT INTO Wine_In_Box (boxId, wineID) VALUES (1, 1); 

然后,运行此查询:

SELECT wid.*, w.*, b.* FROM Wine_In_Box wid LEFT JOIN Wine w ON w.WineID= wid.wineId LEFT JOIN Box b on b.boxID = wid.boxID WHERE boxId = ?; 

这个查询将返回所有信箱中的所有葡萄酒,您可以通过框选择。 您还可以通过使用IN子句将where子句更改为一次获取​​多个框。

+0

我想我在最后一个查询时有点失落 - 表被创建,但查询失败。 '选择wid。*,w。* FROM Wine_In_Box wid LEFT JOIN Wine w ON w.id = wib.wineId WHERE boxId =?;'正在返回'#1054 - 'on子句'中的未知列'w.id' – Chris

+0

@Chris我的不好,我把错误的列名,现在应该工作 – FMashiro

+0

谢谢队友。我想我现在有 - 代码wib.wineId应该是wid.wineId我想是另一个错字。只是将其与boxId 2对齐并且正确的数据返回。将继续测试。非常感谢您的帮助! – Chris

相关问题