2017-02-22 3 views
-2

Ich habe zwei Tabellen in MySQL, eine Tabelle enthält Details der Weine, die zweite Tabelle enthält Details der Felder mit Spalten, die mit der ID der Weine Tabelle für verknüpfen jede Flasche, die in der Box ist.MySQL JOIN Query zu Tabellen auf der Grundlage mehrerer Zellen zu verbinden und an PHP

Eg. :

Weine .ID .Name .year .Beschreibung

Boxen .BoxID .Name .Bottle1 .Bottle2 -> ... .Bottle12

so, wenn Ich habe eine Weinkiste, die 6 Flaschen enthält, die Felder für .Flasche1 bis .Flasche6 enthält die ID der Flasche aus dem Weintisch.

Ich möchte eine SELECT-Abfrage in PHP laufen, die diese beiden Tabellen und gibt die folgende in meiner Webseite verbindet:

Box-XXX "Eine Flasche Wein example1" "Eine Flasche Wein example2" „Bottle nur Wein example3" ‚eine Flasche Wein example4‘ ‚eine Flasche Wein Example5‘ ‚eine Flasche Wein Example6‘

und wenn die Box eine Flasche Wein hat wäre es angezeigt

Box-XXX "Eine Flasche Wein example1"

--EDIT--

ich den folgenden Code versucht bin, die nicht funktioniert ...

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

Beschreiben Weine Ausgabe unter =

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 Boxausgang unten =

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

Dieser Beitrag zeigt keine Forschung, diese Website ist nicht als Code-Anfrage-Plattform gedacht. Es gibt viele, viele Tutorials zum Ausführen von MySQL-Abfragen über PHP. Hier ist ein Beispiel, um Sie zu starten: https://www.w3schools.com/php/php_mysql_connect.asp – Daniel

+0

ok gut danke dafür. – Chris

+0

Für andere - ich habe die folgende Abfrage versucht, die Fehler \t $ box_sql = "SELECT a zurückkehrt * \t \t \t FROM Feld eine linke \t \t WineID b1 auf a.bottle1 = b1.WineID verbinden LEFT JOIN \t. \t wo (b1.WineID ist nicht null oder ... – Chris

Antwort

1

Okay, ich eine mögliche Lösung für Ihr "Problem"

Versuchen Sie, diese Struktur haben:

Wein Tabelle:

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 Tabelle:

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 Tabelle:

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

Nun, was Sie tun würden, ist eine Reihe von Wein zu machen, und dann eine Box erstellen. die Box Sie in Wine_In_Box Tabelle wie so einsetzen zu füllen:

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

Dann, wenn Sie den Inhalt der Box abrufen möchten, führen Sie diese Abfrage:

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

Diese Abfrage wird wieder die ganze Info über alle Weine in der Box, die Sie per Box auswählen können. Sie könnten auch die where-Klausel ändern, um mehrere Felder gleichzeitig zu erhalten, indem Sie eine IN-Klausel verwenden.

+0

Ich denke, ich bin ein wenig verloren bei der letzten Abfrage - Tabelle wird erstellt, aber die Abfrage schlägt fehl. 'SELECT wid. *, W. * FROM Wine_In_Box wid LINKER JOIN Wine w ON w.id = wib.wineId WHERE boxId =?;' Gibt zurück # 1054 - Unbekannte Spalte 'w.id' in 'on clause'' – Chris

+0

@Chris mein Schlechter, ich setze den falschen Spaltennamen, sollte jetzt funktionieren – FMashiro

+0

danke mate. Ich denke, ich habe es jetzt - es gibt einen weiteren Tippfehler im Code wib.wineId sollte wid.wineId sein, denke ich. Habe es einfach gegen boxId 2 ​​ausgeführt und die korrekten Daten kamen zurück. Wird weiter testen. Vielen Dank für Ihre Hilfe! – Chris