2011-10-29 84 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 

這個查詢只給你2家公司的ID,而不是3他們將是類別和國家的第一個和最後一個id。

請注意,我還寫了這個,我沒有MySQL引擎來測試它。

希望能夠幫助你,或者至少給你一個關於如何去做的暗示。

+0

這看起來像是我可以使用,但我怎能把它取回3個或更多IDS? – Ali

+1

where條款交叉產品是redundent。如果沒有where子句,它會正常工作。 – Raihan

+0

是真的,@Raihan,當我寫回答的時候,我正在想別的事情。我將編輯我的答案以刪除where子句。 –

1

以下SELECT語句將按照升序選擇與公司前3 id每個category, country_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如果任何兩個id足夠,您的解決方案將更有效率。 – Raihan

+0

是的,但由於OP在評論中詢問我的回答如何設置它以檢索3個或更多ID,我猜你的回答比我的更適合他的需求 –