データを比較し、要件を満たすデータのみを取得します

WBOY
リリース: 2016-06-23 14:17:35
オリジナル
895 人が閲覧しました

テーブルスタッフ
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 
ログイン後にコピー

Just your data, that's it

「休息(xiuxi)日が 0 未満の場合は、低い方のスコア(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つの場所...低い
これは存在しない可能性が高いため削除できます。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート