1
/
5

検索対象・検索項目共に最小値・最大値がある場合の考え方~PHPでの書き方付き~

今回の検索は、下記の例ような検索をしたい場合に使用できます。

・200,000円~350,000円の家具を、
100,000円~300,000円で絞り込んだ時に出したい。


・9/15~10/15に開催されるイベント情報を、
8/1~10/1で絞り込んだ時に出したい。


つまり、検索条件と検索対象のどちらにも金額や期間などの幅がある場合ですね。

よくある間違いから紹介するので、お急ぎの方は飛ばして結論からどうぞ!

目次 [非表示]

よくある間違い

よくある間違いとして、上限同士・下限同士を比較してしまう下記のようなパターンがあります。

この場合、たしかに検索対象の最小値・最大値がどちらも検索した数値の幅に収まっていれば検索結果に表示されます。

しかし、この場合は検索対象の最小値・最大値がどちらか一方でも検索範囲に収まっていなければ、
検索には出てこないようになってしまいます。

そのため、こちらは間違った絞り込み方となります。

結論

ではどうするのかというと、検索対象の最小値・最大値それぞれを、

検索の最小値・最大値と比べ、どちらかに当てはまれば検索結果に表示、となります!

例で挙げた

・200,000円~350,000円の家具を、
100,000円~300,000円で絞り込んだ時に出したい。

は下記のようになります。

$searchmin = 100000;
$searchmax = 300000;
$itemmin = 200000;
$itemmax = 350000;

if ($searchmin <= $itemmin && $itemmin <= $searchmax || $searchmin <= $itemmax && $itemmax <= $searchmax){
echo('検索結果に表示する');
} else {
echo('検索結果に表示しない');
}$searchmin = 100000;
$searchmax = 300000;
$itemmin = 200000;
$itemmax = 350000;

if ($searchmin <= $itemmin && $itemmin <= $searchmax || $searchmin <= $itemmax && $itemmax <= $searchmax){
echo('検索結果に表示する');
} else {
echo('検索結果に表示しない');
}

ちなみに、実際に使用する際は検索の最小値・最大値が未選択の場合は、無制限扱いなどの対応をすることも多いと思います。

その場合は下記のようになります。


if (!empty($searchmin) && !empty($searchmax)){
if ($searchmin <= $itemmin && $itemmin <= $searchmax || $searchmin <= $itemmax && $itemmax <= $searchmax){
echo('検索結果に表示する');
} else {
echo('検索結果に表示しない');
}
} elseif (!empty($searchmin)){
if ($searchmin <= $itemmin){
echo('検索結果に表示する');
} else {
echo('検索結果に表示しない');
}

} elseif (!empty($searchmax)){
if ($itemmax <= $searchmax){
echo('検索結果に表示する');
} else {
echo('検索結果に表示しない');
}
}
if (!empty($searchmin) && !empty($searchmax)){
if ($searchmin <= $itemmin && $itemmin <= $searchmax || $searchmin <= $itemmax && $itemmax <= $searchmax){
echo('検索結果に表示する');
} else {
echo('検索結果に表示しない');
}
} elseif (!empty($searchmin)){
if ($searchmin <= $itemmin){
echo('検索結果に表示する');
} else {
echo('検索結果に表示しない');
}

} elseif (!empty($searchmax)){
if ($itemmax <= $searchmax){
echo('検索結果に表示する');
} else {
echo('検索結果に表示しない');
}
}

検索最大値が未選択の場合、検索の値と検索対象の最小値同士を比較、
検索最小値が未選択の場合、検索の値と検索対象の最大値同士を比較するだけですね。

最後に

いかがでしたでしょうか?

こうして説明してみると簡単なのに、期間が開いてからやろうとするとパッとできずにこんがらがってしまうんですよね。

検索条件と検索対象が混ざってしまったり…。

そうなってしまったら、皆さんも頭だけで考えずに紙に書いたり色分けしたりしましょう!おすすめです!

今回説明した考え方は、例に挙げた家具や日付のほかに、
求人の給与や旅行プランなど、いろんな検索に使えるので、ぜひ使ってみてください。

ところで

ロジカルスタジオでは、フロントエンドエンジニア・バックエンドエンジニアを募集しております!

下記リンクからお待ちしております!

フロントエンドエンジニア
チームと共にプロジェクトを成功へ導くテクニカルディレクターを募集!!
ロジカルスタジオは、テクノロジーとデザインの視点からクライアントの課題解決をめざす、大阪のクリエイティブプロダクションです。 クライアントの期待を超えて「もっと良くなる、を見つける」のが私たちのスタイル。企画・提案からデザイン制作・システム構築、運用、改善提案をワンストップで行えるのが一番の強みです。近年ではその実績と品質が評価され、案件も急増しています。 代表の古川が掲げる企業理念は「絆を大切に、周りの人を豊かにし、社会に貢献する」。 私たちはこのミッションを推進するため、「新しい技術へのチャレンジ精神」を軸に、「切磋琢磨する仲間」と「働きやすい職場環境」を整え、「成長と可能性を大切にする風土」を育ててきました。 2019年9月に増床し、外部向けのセミナーにも活用できるカンファレンスルームを拡充。スタッフによる公式ブログや、マスコットキャラクター「ロージー&カール」によるTwitterなど、情報発信も強化しています。 可能性の芽をすくい上げられるこの場所を、より大きくしていきたい。 私たちと一緒に、このビジョンを実現しませんか。
株式会社ロジカルスタジオ
株式会社ロジカルスタジオでは一緒に働く仲間を募集しています
2 いいね!
2 いいね!
同じタグの記事
今週のランキング
株式会社ロジカルスタジオからお誘い
この話題に共感したら、メンバーと話してみませんか?