【问题标题】:Distinct values from while loop与 while 循环不同的值
【发布时间】:2017-04-01 19:45:42
【问题描述】:

我有一个数据库,其中有一个名为 part_name 的字段。 值:

Front Control Arm, Rear Control Arm

我只需要回显控制臂,一次。 到目前为止,我得到的 while 循环结果是

Control Arm, Control Arm.

需要从 while 循环结果中回显不同的值。我无法在 SQL 查询 SELECT DISTINCT 上执行此操作,因为我正在替换我在数据库中查询的行中的值。

while ($rowsparts = mysql_fetch_array($displayparts))    {
     $part=''.$rowsparts['part_name'].''; 
     $part = preg_replace('/\bFront\b/u', '', $part);
     $part = preg_replace('/\bRear\b/u', '', $part);  
     echo '<li>'.$part.'</li>';
}

我需要回显 $part 变量的不同值,每个部件名称仅一次。

仅控制手臂。

【问题讨论】:

  • 您也可以在 MySQL 查询中进行正则表达式替换。
  • @WillemVanOnsem 有原生的mysql功能吗?
  • @chris85:没有自定义的。
  • @WillemVanOnsem 这是我的 sql 查询:$selectparts="SELECT * FROM association RIGHT JOIN parts ON association.part_id = parts.id WHERE association.vehicle_id=".$id." AND parts.category ='$category' GROUP BY part_name ORDER BY part_name ASC LIMIT 8";
  • @WillemVanOnsem 我该怎么做?请问有什么想法吗?

标签: php mysql


【解决方案1】:

如果您只想显示零件名称一次,这可能会起作用:

$lastpart = '';
while ($rowsparts = mysql_fetch_array($displayparts)) {
    $part = $rowsparts['part_name']; 
    $part = trim(str_replace('Rear','',str_replace('Front','',$part)));
    if($lastpart != $part) {
        $lastpart = $part;
        echo "<li>".$part."</li>\n";
    } else {
        echo "<li>Part name duplicate: $part, lastpart: $lastpart</li>\n";
    }
}

我添加了 else 用于调试。它将显示用于检测重复项的两个变量。您将在测试后将其删除。

如果您希望在零件名称不按顺序时仅显示零件名称一次,这可能会起作用。 它建立一个零件名称列表,并根据列表检查每个零件名称,显示 仅列出未在列表中找到的那些。

$part_list = array();
while ($rowsparts = mysql_fetch_array($displayparts)) {
    $part = $rowsparts['part_name']; 
    $part = trim(str_replace('Rear','',str_replace('Front','',$part)));
    if(!isset($part_list[$part])) {
        $part_list[$part] = 1;
        echo "<li>".$part."</li>\n";
    }
}

【讨论】:

  • 它无法使用您给我的代码,仍在回显重复的部件名称
  • 你能举个例子说明它是如何不工作的吗?也就是说,检索到的记录的简短列表和结果输出?
  • 对于这种方法,您需要order by part_name。这不是最有效的方法。用 SQL 做会更好。
  • @user3740456,该链接有些帮助,但“噪音”太多。我更改了上面的代码以提供一些“调试”信息。尝试创建一个仅显示问题区域的简单示例页面(不是站点菜单的一部分)。
猜你喜欢
  • 1970-01-01
  • 2016-04-24
  • 2018-04-20
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多