2011-10-29 16 views
1

当社のウェブサイトのバグを解決するために、サードパーティのテストエンジニアやプログラマーを雇っています。彼らは私たちのWebアプリケーションのベータインストールに取り組んでいます。私たちはデータベースのコピーを提供する必要があります。データベース全体、つまり巨大な企業データベースを提供したくありません。だから、適切なテストを行うのに十分なだけの実際のデータのほんの一部を持っているものを流通させたいのです。SQLのデータベースからランダムなタプルを削除する必要があります。

我々は、次のスキーマ内のデータを持っている:

COMPANIES 
ID|NAME|CATEGORY|COUNTRY_ID..... 

我々はまた、カテゴリや国のセット数を持っています。

私たちは、削除があまりにもランダムであることを望んでいません。基本的に何百ものエントリから、数百のエントリを持つバージョンを提供する必要がありますが、少なくとも、各国およびカテゴリーごとに2-3社。

私は上記の制限をはるかに少なく削除して選択クエリを実行する方法としてちょっと難解です。

ここで使用するMySQLデータベースです。 SQLでこれを行うこともできますか、PHPでスクリプトを作成する必要がありますか?

答えて

0

ない私が間違っている可能性がありますいくつかの仮定をしていますので、私の答えは、あなたのニーズに適合しますが、あなたは、次のアプローチを試みることができることを確認:

select category, country_id, min(id) id1, max(id) id2 
    from companies 
group by country_id, category 
order by country_id, category 

このクエリのみ代わりに3のあなたの2つの企業IDを与え、カテゴリと国に一致する最初と最後のIDになります。

私もこれを書いており、テストするためのMySQLエンジンはありません。

あなたがそれを行う方法を助けるか、少なくともあなたにヒントを与えますか?

+0

? – Ali

+1

where句の積は冗長です。 where節なしでうまく動作します。 – Raihan

+0

真実、@ライハン、私の答えを書いたとき、私は何かについて考えていたと思う。私は答えを編集してwhere句を削除します。 –

1

category, country_id組み合わせのためにselect文が昇順に3最初idを持つ企業を選択すれば、以下の通り:

私はそれを設定することができます3つの以上のIDを取得する方法しかし、私は使用することができます何かのように見えます
select id, name, category, country_id 
from companies c1 
where id in (
       select id 
       from companies c2 
       where c2.category=c1.category and c2.countr_id=c1.country_id 
       order by id 
       limit 3 
      ); 
+0

私よりも良いアプローチです。 :-) –

+0

@Guillemもし2つのIDがあれば、あなたのソリューションはより効率的になります。 – Raihan

+0

はい、しかし、OPは3つ以上のIDを取得するためにそれを設定する方法について私の答えにコメントしてきたので、あなたの答えは自分のニーズに合っていると思います –

関連する問題