我试图将基于MySQL查询的一组唯一数据输出到页面。最终结果应包括一家药房和相关价格。这是查询和while循环创建的数组的示例:

Array (
     [0] => Array (
         [Copay_Amount] => 18.37
         [Pharmacy_Name] => CVS PHARMACY 04286
     )
     [1] => Array (
         [Copay_Amount] => 27.54
         [Pharmacy_Name] => HEB PHARMACY 662
     )
     [2] => Array (
         [Copay_Amount] => 22.46
         [Pharmacy_Name] => WALMART PHARMACY 10-4194 104194
     )
     [3] => Array (
         [Copay_Amount] => 9.77
         [Pharmacy_Name] => PUBLIX PHARMACY 0050
     )
     [4] => Array (
         [Copay_Amount] => 18.37
         [Pharmacy_Name] => CVS PHARMACY 06961
     )
     [5] => Array (
         [Copay_Amount] => 12.52
         [Pharmacy_Name] => KROGER PHARMACY 24660
     )
     [6] => Array (
         [Copay_Amount] => 22.46
         [Pharmacy_Name] => WALMART PHARMACY 10-1187 101187
     )


这将产生以下结果



<table class="table table-striped .table-responsive h3">
  <tbody>
    <tr>
     <td>CVS</td>
     <td>$18.37</td>
    </tr>
    <tr>
     <td>HEB</td>
     <td>$27.54</td>
    </tr>
    <tr>
     <td>WALMART</td>
     <td>$22.46</td>
    </tr>
    <tr>
     <td>PUBLIX</td>
     <td>$9.77</td>
    </tr>
    <tr>
     <td>CVS</td>
     <td>$18.37</td>
    </tr>
    <tr>
     <td>KROGER</td>
     <td>$12.52</td>
    </tr>
    <tr>
     <td>WALMART</td>
     <td>$22.46</td>
    </tr>
    <tr>
     <td>PUBLIX</td>
     <td>$9.77</td>
    </tr>
    <tr>
     <td>PLAQUEMINES</td>
     <td>$12.35</td>
    </tr>
    <tr>
     <td>BARTELL DRUGS</td>
     <td>$12.17</td>
    </tr>
    <tr>
     <td>BROOKSHIRES</td>
     <td>$12.68</td>
    </tr>
    <tr>
     <td>KROGER  </td>
     <td>$12.52</td>
    </tr>
    <tr>
     <td>WALMART</td>
     <td>$22.46</td>
    </tbody>
   </table>





我在while循环中清除了药店ID,如下所示:

$cashprice = round($row['Copay_Amount'],2);
$pharmacy = trim($row['Pharmacy_Name']);
$pharmacy = substr($pharmacy, 0, strpos($pharmacy, "#"));
$pharmacy = str_replace('DISCOUNT',"",$pharmacy);
$pharmacy = str_replace('PHARMACY',"",$pharmacy);
$pharmacy = preg_replace('/[-#()0-9]+/', '', $pharmacy);


我正在尝试从表格中删除重复项,在这种情况下,是从CVS,沃尔玛和Publix中删除,因此它仅显示了一个唯一的药房和价格集。
我尝试使用GROUP BY在MySQL级别上执行此操作,但为此,我需要另一个表,该表将长药房名称与较短的药房名称相匹配,并且查询时间不可接受。我还刚刚对array_unique进行了实验,如下面的部分所示:

$items = array_unique($r->fetch_assoc(), SORT_NUMERIC);


但这会删除所有CVS项,然后将其重复四次(上面的数组只是部分... MySQL查询集LIMIT 0,100)。

希望找到可怜我的人以及我独特的PHP方式来帮助我!谢谢!

最佳答案

我最终使用了蛮力法。备份数据库后,我对主要药房进行了更新。一旦您进入了前十名,就可以覆盖全部80%左右,这已经足够了。有危险吗你打赌推荐的?嗯,但是我先在本地进行了很多测试,然后在生产数据库上进行了测试。

我现在正在研究如何规范化数据库,以便将来可以根据需要添加这样的字段。在同一数据库中具有short_pharmacy字段会极大地加快查询速度,更不用说带回使用GROUP BY的好处。

谢谢!

09-25 17:04
查看更多