MySQL Query帮助并输出到PHP

时间:2011-09-28 15:55:08

标签: php mysql

下面是我到目前为止的附图。 1 =一个特征,2 =一个好处。

我需要做的是将功能与优势相匹配。第一个#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>

有没有人知道如何才能实现这一目标?

3 个答案:

答案 0 :(得分:2)

无法确保这种情况正确发生。相反,您应该将2连接在一起,使用单独的表并使用索引和唯一标识符。

如果始终一起使用功能和优点,您还可以向其添加另一列。

这将使一个表有4列:

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

答案 1 :(得分:1)

我不知道其他人在谈论什么,但是如果你知道FB_TYPEID 1FB_TYPEID,它会被视为一项功能,当2SELECT `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 时,它被认为是一种好处,然后订购很容易。

使用此查询:

mysqli

确保您免受SQL injection的侵害。您现在使用$sku_modelid查询的方式很容易受到SQL注入的影响(假设$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

(可能会遗漏一些内容,因为我从不使用{{1}}库。但我相信它应该有用。)

答案 2 :(得分:0)

这是一种非常危险的方法。

从技术上讲,SQL没有任何“Order”概念。是的,实际上它会在你把它们放到那里时订购,但是不能保证它们会以预期的顺序出现。

你最好创建两个单独的表,一个用于“功能”,一个用于“好处。然后用外键加入它们。

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