2011-09-28 71 views
-1

下面是我到目前爲止所附的圖片。 1 =功能,2 =優勢。MySQL查詢幫助並輸出到PHP

我需要做的是匹配功能和好處。第一#1變與第一#2

enter image description here

我至今是:

<?php 
if ($result = $mysqli->query('SELECT FB_TEXT FROM `FB_DATA` WHERE `FB_MODELID` = "'.$sku_modelid.'" AND FB_TYPEID IN (1,2)')) { 

    while($row = $result->fetch_assoc()){ 
     echo "<tr><td>".$row['FB_TEXT']."</td></tr>"; 
    } 

} 
?> 

現在這顯示了所有結果。需要發生的是這樣的:

<tr> 
    <td>Feature</td> 
    <td>Benefit</td> 
</tr> 

有沒有人有任何想法我可以做到這一點?

+1

你怎麼知道哪個是第一位的? – Pentium10

+0

你知道我真的不知道..我只是搜索了一下這個型號ID,這就是出現的情況,並且它完美匹配。 – Drew

+0

你需要一個訂單ID,並檢查下面的第一個aswer。 – Pentium10

回答

2

有沒有辦法確保這會發生正確。相反,您應該使用單獨的表格並使用索引和唯一標識符將2連接在一起。

如果功能和優點總是一起使用,您還可以向其添加另一列。

這將使得有4列的表格:

  1. ID(唯一的)
  2. 功能
  3. 效益
  4. 文本
0

這是做這是一個非常危險的方式。

從技術上講,SQL沒有任何「Order」的概念。是的,在所有的實際情況中,當你把它放在那裏時,它就會下訂單,但是並不能保證它們會以預期的順序出貨。

你最好是去創建兩個單獨的表,一爲「特色」,一個針對「利益。然後用外鍵加入他們的行列。

SELECT * FROM features JOIN benefits ON features.link_id = benefits.link_id WHERE features.model_id = 1 
1

我不知道別人是關於,但如果你知道,當FB_TYPEID1它被認爲是一種功能,當FB_TYPEID2,它被認爲是一個好處,那麼排序是容易

使用此查詢:

SELECT 
    `FB_TYPEID`, 
    `FB_TEXT` 
FROM 
    `FB_DATA` 
WHERE 
    `FB_MODELID` = theModelIdYouAreLookingFor AND 
    `FB_TYPEID` IN (1,2) 
ORDER BY 
    CASE `FB_TYPEID` 
     WHEN 1 THEN 0 
     WHEN 2 THEN 1 
     # switch this to: 
     # WHEN 2 THEN 0 
     # WHEN 1 THEN 1 
     # if you want benefit to show first 
    END 

確保您保護自己免受SQL injection的侵害。您現在使用mysqli進行查詢的方式容易受到SQL注入的影響(假設$sku_modelid未被過濾)。你應該使用帶有綁定參數的預準備語句。喜歡的東西:

$sql = ' 
    SELECT 
     `FB_TYPEID`, 
     `FB_TEXT` 
    FROM 
     `FB_DATA` 
    WHERE 
     `FB_MODELID` = ? AND 
     `FB_TYPEID` IN (1,2) 
    ORDER BY 
     CASE `FB_TYPEID` 
      WHEN 1 THEN 0 
      WHEN 2 THEN 1 
     END 
'; 
if($statement = $mysqli->prepare($sql)) 
{ 
    // bind $sku_modelid to the first (and only) questionmark (placeholder) as an integer 
    $statement->bind_param('i', $sku_modelid); 

    // execute the prepared statement 
    if($statement->execute()) 
    { 
     // bind FB_TYPEID to $typeId and FB_TEXT to $text 
     $statement->bind_result($typeId, $text); 
     while($row = $result->fetch_assoc()) 
     { 
      // echo the table row 
      if($typeId == 1) echo '<tr>'; 
      echo '<td>' . $text . '</td>'; 
      if($typeId == 2) echo '</tr>'; 
     } 
    } 
} 

(可能是失去了一些東西,因爲我從來沒有使用mysqli庫,但我相信它應該工作。)

+0

非常感謝,感謝您的幫助。我似乎無法完成正確的工作。它輸出​​功能​​功能​​功能 - 在一個點它給出了兩個TDS。這裏是一個預覽http://imageshack.us/photo/my-images/714/previewpe.jpg/ – Drew

+0

只要我能創建一個HTML表​​功能​​功能​​功能​​好處​​beneft​​好處那麼它會很容易。 – Drew

+0

@德魯:哦,等一下,我明白了其他人的意見。我認爲每FB_MODELID只會有一個好處和一個功能。傻我。在這種情況下,他們當然無法區分哪些特徵應該與哪些好處配對。我認爲你確實需要重新考慮數據庫設計。 –