いくつかのロジックを適用する必要がある配列のリストがあります。配列内の各要素は、データベース内のカテゴリを参照します。
これまでのところ、foreach ループ内のカウントを使用して、カテゴリがデータベースに適用された回数をカウントしています。このカウントを foreach ループの外に移動する方法はありますか? これまでのところ、実際にはまったく遅くはなく、0.00241899490356 でベンチマークされています。
しかし、150 を超えるカテゴリがあり、それぞれがループされて 6 回カウントされています。カテゴリの使用量とデータベース スペースが増えると、処理が遅くなるのではないかと心配しています。DB アクションはループにすべきではないことを読みました。これは、同様のシナリオで問題なく許される慣行ですか?
編集 :: コードが不足していることを本当にお詫び申し上げます。私は通常、最初に質問の概要を説明してから、穴を埋めます。私の時間がなくなった。ずさんになるための言い訳ではありませんが、それは私が持っているものです. 現在の返信を読む前に、今すぐ修正します。
$nazioni = array(
'ad' => array( 'eur', ),
'ae' => array( 'asi', ),
'af' => array( 'asi', ),
'ag' => array( 'nam', ),
'al' => array( 'eur', ),
'am' => array( 'asi', 'eur', ),
...
'za' => array( 'afr', ),
'zm' => array( 'afr', ),
'zw' => array( 'afr', ),
);
$categorie = array(
'eur',
'asi',
'afr',
'nam',
'sam',
'oce',
);
echo '<ul>';
foreach($categorie as $cat)
{
echo '<li><a href="#">'.$cat.'</a></li>';
echo '<ul>';
foreach($nazioni as $n=>$c)
{
if(array_intersect(array($cat), $c) == true)
{
echo Filtra::uri_locale($n, $cat, $uri);
}
}
echo '</ul>';
}
echo '</ul>';
}
カウントは Filtra::uri_locale アクションで行われます。
public static function uri_locale ($n, $cat, $uri)
{
$count = DB::table('recipes')
->where(function($query)
{
$corso = Filtra::corso(explode("/", URI::current()));
if(!empty($corso))
{
$query->where_in('course', $corso, 'OR');
}
})
->where('nation', '=', $n)->count();
//if more than 0, or not empty and in the uri array.
if($count > 0 || !empty($uri) && array_intersect(array($n), $uri))
{
return self::uri_href($uri, $n, $count);
// ex: returns a link named Italy (3) if Italy has 3 results counted.
}
}
私が調べている関連データベーステーブル:
| id | title | nation | course |
————————————————————————————————
| 1 | Pizza | it | 4 |
それはイタリアに翻訳され、コースは、同様のロジック、同じ問題に対する同じ解決策を使用する分類の別のレイヤーに使用されます。
繰り返しますが、この取り違えについて本当に申し訳ありません。頭と期限を大幅に超えています。