2012-12-06 65 views
0

我想我可能已經沉浸在我的腦海中。我所擁有的是mysql中的兩個表格,它們具有共同的字段。 Id喜歡在表格中顯示一條記錄,其中包含一行或共同字段共有的所有記錄列表。在子表中顯示mysql結果?

詳細地說,我有一個紗線圖表和圖像模式表。編號喜歡在一行中顯示花樣和它的信息,然後在它下面顯示所有的紗線圖像,這些紗線圖像與子行中的公共重量字段相匹配。

我也通過複選框組選擇模式的顏色和類別。

這裏是我的複選框組

<input type="checkbox" name="color[]" value="Black">Black 
<input type="checkbox" name="color[]" value="Blue">Blue 
<input type="checkbox" name="color[]" value="Brown">Brown 
<input type="checkbox" name="color[]" value="Green">Green 
<input type="checkbox" name="color[]" value="Grey">Grey 
<input type="checkbox" name="color[]" value="Orange">Orange 
<input type="checkbox" name="color[]" value="Pink">Pink 
<input type="checkbox" name="color[]" value="Purple">Purple 
<input type="checkbox" name="color[]" value="Red">Red 
<input type="checkbox" name="color[]" value="Teal">Teal 
<input type="checkbox" name="color[]" value="White">White 
<input type="checkbox" name="color[]" value="Yellow">Yellow 



<input type="checkbox" name="pattcat[]" value="Home Decor">Home Decor 
<input type="checkbox" name="pattcat[]" value="Children">Children 
<input type="checkbox" name="pattcat[]" value="Tops Women">Tops Women 
<input type="checkbox" name="pattcat[]" value="Accessories">Accessories 
<input type="checkbox" name="pattcat[]" value="Lace">Lace 
<input type="checkbox" name="pattcat[]" value="Tops Men">Tops Men 

這裏是我的查詢顯示錶的結果爲止。我將所有圖像名稱保存在mysql表中並鏈接到路徑。

extract($_GET); 

$query = "(SELECT tblPatterns.PatternName, tblPatterns.Needlesize, tblPatterns.FinishedSize, tblPatterns.YardageNeeded, tblPatterns.PatternImage, tblYarn.YarnImage FROM tblYarn, tblPatterns WHERE tblYarn.WeightCategory=tblPatterns.WeightCategory && Color IN ('" . implode("','",$color) . "') && Category IN ('" . implode("','",$pattcat) . "') ORDER BY `tblPatterns`.`PatternName` ASC)" ; 
$result = mysql_query($query) or die('Query failed: ' . mysql_error()); 

// Printing results in HTML 
echo "<table border='1'>\n"; 
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { 
echo "\t<tr>\n"; 
foreach ($line as $col_value) { 
echo "\t\t<td>$col_value</td>\n"; 
} 
echo "<td><img src=./images/$col_value width='150' height='150' border='3' ></td>"; 


echo "\t</tr>\n"; 
} 
echo "</table>\n"; 

我在想我可能不得不改變foreach($ line as $ col_value)部分。有沒有辦法建立一個表,並選擇確切的數據去哪裏以及它是否重複?如在來自重複在該行下的紗線的圖像中以及其對應的圖案數據那樣?

+0

並請,爲您的代碼的安全性,使用類似PDO使你的代碼少注射。就目前而言,它正在乞求有人做sql注入。 – bpeterson76

+0

哇......提取物($ _ GET);' – Rudie

回答

0

我想這是你想要什麼:

$last_pattern = null; 
while ($line = mysql_fetch_assoc($result, MYSQL_ASSOC)) { 
    $col_count = count($line) - 1; // Subtract 1 because image isn't in a column 
    if ($line['PatternName'] !== $last_pattern) { 
    if ($last_pattern !== null) { 
     echo "</td></tr>\n"; 
    } 
    echo "<tr>\n "; 
    foreach ($line as $col_name => $col_value) { 
     switch ($col_name) { 
     case 'YarnImage': 
     break; 
     case 'PatternImage': 
     echo "<td><image src='images/$col_value' /></td>"; 
     break; 
     default: 
     echo "<td>$col_value</td>"; 
     } 
    } 
    $last_pattern = $line['PatternName']; 
    echo "</tr>\n <tr><td colspan='$col_count'>\n"; 
    } 
    $yarn_image = $line['YarnImage']; 
    echo " <img src='images/$yarn_image' width='150' height='150' border='3'/>\n"; 
} 
if ($last_image !== null) { 
    echo "</td></tr>"; 
} 
+0

這仍然讓我重複每個紗線圖像的每個模式,我得到一個mysqlresults列表,然後在每個之下的一個破碎的圖像。 – user1883671

+0

我真的不知道你的數據是什麼。我認爲'PatternImage'列是'images'目錄中文件的名稱,其中包含要顯示的圖像。也許它應該使用'tblYarn.YarnImage'。這些文件名是? – Barmar

+0

你是說它不應該爲查詢返回的每一行顯示一個錶行,因爲表格行中有多個具有相同值的圖像?所以你想把它們全部合併到一個表格行中,並在其下面顯示所有圖像?應該使用哪些列來確定它們是否相同,還是必須將它們全部進行比較(圖像除外)? – Barmar

0

您需要tblYarn加入tblPatterns :)

http://www.tizag.com/mysqlTutorial/mysqljoins.php

此外,圖像TD是在foreach之外,因此它不會與循環$ col_value它前面。

+0

即時學生如此原諒我,但我還沒有通過選擇tblPatterns,tblYarn加入tblPatterns tblYarn?目前,我沒有得到任何圖案的圖像,也沒有得到紗線圖像信息的重複記錄。 – user1883671