2017-11-03 6 views
0

MySQLクエリに基づいてユニークなデータセットをページに出力しようとしています。最終結果には、1つの薬局とそれに関連する価格が含まれている必要があります。ここでは、クエリによって、ループしながら、作成された配列のサンプルです:MySQLクエリの後にPHPを使用してユニークなデータを出力する

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 
    ) 

これは私がどのwhileループで薬局店舗IDをきれい以下

<table class="table table-striped .table-responsive h3"> \t 
 
    <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>

を生成します次のようになります。

$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、Walmart、およびPublixからは1つの固有の薬局と価格が表示されています。 私は、GROUP BYを使用してMySQLレベルでこれを実行しようとしましたが、そのためには長い薬局名と短いものが一致する2番目のテーブルが必要です。クエリ時間は受け入れられません。

$items = array_unique($r->fetch_assoc(), SORT_NUMERIC); 
をそれはすべてが、CVSの項目とし、それらを繰り返し4回(上記の配列が部分的にしか... MySQLのクエリセットLIMIT 0を削除します。一部はここに示したように、私もちょうどarray_uniqueを試してきました、100)。

私に同情してくれる人を見つけることを願って、これを手伝う私の独特のPHP方法!ありがとう!

+4

クエリでSELECT DISTINCTを直接使用しようとしましたか?これは、トリックをして、多くの時間とコードを保存する必要があります – Lucarnosky

+0

@ルカルノスキー、あなたはそれに私を打つ:)。追加するには、関連する価格が同じであるため、喜んで 'SELECT DISTINCT Pharmacy、Price FROM Table'のようにすることができます。次のURLをチェックしてください:https://www.w3schools.com/sql/sql_distinct.asp – nurchi

+0

グループなしで左の結合を行っていますか? –

答えて

0

私はブルートフォース方式を使用しました。私はデータベースをバックアップした後、主要な薬局の分野でUPDATESを実行しました。一度あなたは十分に良いそれらのすべての約80%をカバーするトップ10を取得します。危険な?あなたは賭ける。お勧めですか?ええ、私は多くのテストをローカルで行いました。

私は現在、データベースを正規化して、今後必要に応じてこのようなフィールドを追加できるようにしています。同じデータベース内にshort_pharmacyフィールドを持つことで、GROUP BYを使用した場合のメリットを取り戻すことはできません。

ありがとうございます!

関連する問題