2017-02-22 56 views
-2

У меня есть две таблицы в MySQL, одна таблица содержит детали вин, вторая таблица содержит сведения о коробках со столбцами, которые ссылаются на идентификатор таблицы винов для каждая бутылка находится в коробке.MySQL JOIN запрос для объединения таблиц на основе множественных ячеек и вывода на PHP

Например. :

Вина .id .Name .Year .description

Коробки .BoxID .Name .Bottle1 .Bottle2 -> ... .Bottle12

так что если У меня есть коробка вина, в которой есть 6 бутылок, поля для .Bottle1 через. Bottle6 будет содержать идентификатор бутылки со стола Винов.

Я хочу запустить запрос на выборку в PHP, который соединяет эти две таблицы и выводит следующее в моей веб-странице:

Box-XXX «Бутылка вина example1» «Бутылка вина example2» «Бутылка вина example3" „Бутылка вина“ Example4 „Бутылка вина“ Example5 „Бутылка вина Example6“

и если коробка имеет только одну бутылку вина он будет отображать

Box-XXX "Бутылка вина example1"

--EDIT--

Я пытаюсь следующий код, который не работает ...

<?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  

ОПИСАТЬ выход коробки ниже =

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

В этом сообщении не показано исследований, этот сайт не предназначен для платформы с кодовым запросом. Существует множество многих обучающих программ по запуску MySQL-запросов через PHP. Вот один из примеров, чтобы начать: https://www.w3schools.com/php/php_mysql_connect.asp – Daniel

+0

ОК хорошо спасибо за это. – Chris

+0

Для других - я пытался следующий запрос, который возвращает ошибки \t $ box_sql = "SELECT а * \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  

Box стол:

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 = ?; 

Этот запрос будет возвращать все информацию обо всех винах в коробке, которую вы можете выбрать по полю. Вы также можете изменить предложение where, чтобы сразу получить несколько ящиков, используя предложение IN.

+0

Я думаю, что я немного теряюсь в последнем запросе - создается таблица, но запрос терпит неудачу. 'SELECT wid. *, W. * FROM Wine_In_Box wid LEFT JOIN Wine w ON w.id = wib.wineId WHERE boxId =?;' Возвращает '# 1054 - Неизвестный столбец 'w.id' в 'on clause'' – Chris

+0

@ Крис, мой плохой, я поставил неправильное имя столбца, теперь должен работать – FMashiro

+0

спасибо помощнику. Я думаю, что у меня есть это сейчас - есть еще одна опечатка в коде wib.wineId должна быть wid.wineId, я думаю. Просто запустил его против boxId 2 ​​и вернули данные. Продолжит тестирование. Большое спасибо за вашу помощь! – Chris