ホームページ >バックエンド開発 >PHPチュートリアル >データを比較し、要件を満たすデータのみを取得します
テーブルスタッフ
id fenshu xiuxi bumen
1 80 0 2
2 80 1 2
3 90 2 2
4 60 0 3
要件: 1. 同じ部門 (bumen) からのデータは 1 つだけ表示されます
2 . 値の順序、休息 (xiuxi) 日が 0 より大きい場合、スコアが高い方 (フェンシュウ) を選択します
3. 休息 (xiuxi) 日が 0 より小さい場合、スコアの低い方 (フェンシュウ) を選択します。 )
上記のデータのみを使用できる場合、結果は次のようになります
id fenshu xiuxi bumen
3 90 2 2
SQL コードまたは PHP コードを求めることができます。
4 60 0 3
なぜこれは役に立たないのですか?
4 60 0 3
なぜこれが役に立たないのですか?
も表示されるはずですが無視しました、
create table Staff
(
id int(10),
fenshu int(10),
xiuxi int(10),
bumen int(10),
)
insert五線に挿入 (id,fenshu,xiuxi,bumen) 値(1,80,0,2)
五線に挿入 (id,fenshu,xiuxi,bumen) 値(2,80,1,2)
五線に挿入 (id) , fenshu,xiuxi,bumen) value(3,90,2,2)
スタッフ (id,fenshu,xiuxi,bumen) に挿入 value(4,60,0,3)
/*
このようなレポートを取得するには:
id fenshu xiuxi bumen
3 90 2
4 60 0 3
*/
一番大きいものを取り出す必要があるように感じますが、それでも休息 (xiuxi) 日が 0 より大きいと判断することはできません。 SQL のみを使用して実現できます。
select staff.* from staff, (select max(fenshu) as fenshu, bumen from staff group by bumen) t where staff.bumen = t.bumen and staff.fenshu=t.fenshu
あなたのデータ 同じブメンが xiuxi =0 の 2 つのデータを持つことは可能ですか?
悪いメソッドを投稿すると、最初にテーブル全体がチェックされて、PHP が処理する制御不能なサイズの配列が生成され、ループ後に未知の数のループが繰り返されることです。
配列
(
[0] => 配列
(
[id] => 3
[フェンシュ] => 90
[xiuxi] => 2
[bumen] => 2
)
[1] => 配列
...
配列
(
[0] => 配列
(
[id] => 3
[フェンシュ] => 90
[xiuxi] => 2
[bumen] => 2
)
[1] => array
...オーバーフロー
1つの場所...低い
これは存在しない可能性が高いため削除できます。