问题从mysql数据库中排序多个单词

时间:2012-12-18 15:23:17

标签: php mysql sorting filter word

我有一个运行MySQL查询的PHP代码,可以通过选择的过滤器对某些输出数据进行排序。

我遇到的问题是当我用1个字过滤时,即当我按颜色过滤时,它适用于RED,YELLOW等。但不适用于BLUE NAVY。

我认为添加'"就足够了,但事实并非如此。

这是我目前的代码:

 <?php
$colors = $con -> prepare("SELECT DISTINCT color_base1 FROM item_descr ORDER BY color_base1 ASC");
$colors ->execute();
while ($colorBoxes = $colors->fetch(PDO::FETCH_ASSOC))
{
echo "<input type='checkbox' class='regularCheckbox' name='color' value='".$colorBoxes[color_base1]."' /><font class='similarItemsText'>   ".$colorBoxes[color_base1]."</font><br />";
}
?>

谢谢!

2 个答案:

答案 0 :(得分:0)

您的数组索引需要引号。

更改:$colorBoxes[color_base1]

收件人:$colorBoxes['color_base1']

Bonus points

printf(
    "<input type='checkbox' class='regularCheckbox' name='color' value='%s' /><font class='similarItemsText'>   %s</font><br />",
    $colorBoxes['color_base1'],
    $colorBoxes['color_base1']
);

此外,当输入name字段中有空格时,您的表单数据可能会提交非常奇怪。在提交表单后尝试var_dump($_REQUEST)以查看交易是什么,但我建议您不要在color_base1字段中使用空格。

答案 1 :(得分:0)

你的sql看起来正确,你的代码看起来也正确但是因为你正在使用SELECT DISTINCT 这可能导致问题,它只从两个单词中选择一个单词(它将与蓝色和海军不同),因此还有一种更好的建议方法。 +你正在做ORDER BY所以如果你使用DISTINCTORDER BY就没有必要,因为他们做同样的工作。

  • 如果您使用item_descr类型ENUMSET,那么它们将按列索引而非列值排序。

尝试不要这样做

SELECT color_base1 FROM item_descr ORDER BY color_base1 ASC   

此处DEMO SQL FIDDLE