mysqlには年齢層を格納するフィールドageがあり、形式は図のとおりで、0-0の場合は無制限です
現在の要件は、年齢グループに基づいて検索することです。たとえば、25 歳から 34 歳までのすべてのデータを検索したいと考えています。
その後、問題が発生します。where で and を使用すると、結果はほとんど得られず、ほとんど何も得られません。or を使用すると、結果は多くなりますが、結果が正確ではないことは明らかです。正確に検索するにはどうすればよいですか
ご回答ありがとうございます。現在私が使用している方法は
です。SELECT age FROM
jobs
WHERE ((substring_index(age,'-',1) >= 16 OR substring_index(age,'-',-1) = 0 ) OR (substring_index(age,'-',-1) <= 24)) AND !(substring_index(age,'-',1) = 0 AND substring_index(age,'-',-1) = 0) ;
ほとんど使えないけど、何か違和感がある
おっしゃるとおり、30-55が25-34と一致する場合は、こうなる可能性があります
リーリーこれは判断が難しいですが、30~55はあなたが望む25~34の条件を満たしていますか?それとも25~34以内でなければならないのでしょうか?それはあなたの具体的な要件によって異なります
なぜデータテーブル構造がこのように設計されているのか、非常に興味があります。なぜ年齢を保存しないのですか? テーブル構造がこのように設計されている場合、なぜ 25 歳から 34 歳までのデータを取得する必要があるのでしょうか?あなたの年齢は指定された範囲にすぎず、特定の値ではありません。テーブルの構造を再設計し、誤って間違いをしないようにする必要があります。
1. このように年齢グループを保存する場合、年齢範囲を区別するために別のキーを作成する必要がありますか?
2. スクリーンショットには 1-5、2-6、3-4 などのスパンのデザインも表示されています。ユーザーが 3 を選択した場合、どれを選択する必要がありますか?
MySQL の組み込み関数を理解していない多くの人が、他人に適当な指導を行っています
問題の原因はデータベース設計に無理がある
抽象的な思考を使って振り返ることをお勧めします。テーブルの年齢フィールドに格納されている情報をセット A として考え、どこにある条件をセット C として考えます。最終的な結果はどのような状況を満たす必要がありますか?
セット A とセット C には交差があります
セット A はセット C のサブセットです
集合 C は集合 C そのものです
これに基づいて、現在のテーブル構造は明らかに適切ではありません。データの量が大きくない場合は、オフラインでデータをクリーンアップし、年齢フィールドを下限と上限に分割してから、コレクション フィルタリング方法を使用できます。たくさん。
あなたのテーブル構造ではあなたが言及した機能を実現できません