【问题标题】:Issue sorting from mysql database more than one word从mysql数据库中排序超过一个单词
【发布时间】:2012-12-05 20:14:47
【问题描述】:

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

我遇到的问题是当我过滤超过 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 />";
}
?>

谢谢!

【问题讨论】:

  • 你的桌子上有海军蓝吗?
  • 是的,它存在于数据库中

标签: php mysql sorting filter word


【解决方案1】:

您需要在数组索引周围加上引号。

更改:$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 字段中使用空格。

【讨论】:

    【解决方案2】:

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

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

    尝试这样做

    SELECT color_base1 FROM item_descr ORDER BY color_base1 ASC   
    

    这里DEMO SQL FIDDLE

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 1970-01-01
      • 2013-07-30
      • 2013-02-10
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      相关资源
      最近更新 更多