2014-06-16 37 views
0

我那裏有兩列的表:parent_column和child_column集團的一個領域,並命令由蘭特另一場在MySQL

這裏是我想達到的目標: 我想顯示父列的數與隨機的孩子一起。我嘗試了內部查詢,但這並沒有使我的工作。

這裏是我的表:

Child   PARENT 
1    55 
2    55 
3    55 

這裏是我想要的東西: 在第一次刷新

parent count child 
55  3  3 

在第二刷新

parent count child 
55  3  2 

等..

我想這

SELECT t1.parent, count(*) count, t2. child 
FROM t1 
INNER JOIN (
SELECT parent, child 
FROM t2 
ORDER BY RAND() 
) t2 on t2.parent = t1.parent 
GROUP BY t1.parent 
LIMIT 25 

編輯: 這是一個真實的場景: 由上表可以是產品,並且每個產品都有一個父。我想實現的是: 我想在前端顯示5個產品。 每個產品應該有一個獨特的父母。更復雜的是,在每個頁面刷新時,應該更改此產品,因爲父級可以有多個產品。 任何幫助,將不勝感激

演示 1日刷新

Product Company 
P1234 Samsung 
P5555 LG 

月2刷新

Product Company 
P2345 Samsung 
P5123 LG 

感謝

+0

你在叫 '刷新'? –

+0

@JorgeCampos每次執行查詢。爲了獲得隨機孩子的價值是我的意思。 –

+0

@JorgeCampos謝謝你的回答。你能分享一件事嗎?我們可以對其性能採取其他預防措施嗎? –

回答

1

試試這個方法:

select t1.parent, count(*), 
     (select child 
      from test t2 
      where t2.parent = t1.parent 
      order by rand() 
      limit 1) child 
from test t1 
group by t1.parent; 

看到它在這裏sqlfiddle:http://sqlfiddle.com/#!2/4860c/3

1

這是不是你想要做什麼?

SELECT t1.parent, 
     (select count(*) from t2 where t2.parent = t1.parent) as count, 
     t2. child 
FROM t1 
ORDER BY RAND() 
LIMIT 25; 

我真的沒有看到外部查詢中聚合的目的。

+0

嘿,謝謝。看起來這是我想要的,但我不明白這將如何顯示我的記錄按父母分組,因爲你沒有提及它的分組。另外,你提取的第三列是我們沒有加入的t2.child。任何修改或我得到錯誤? –

+0

@RajaAmerKhan。 。 。爲什麼你想由父母分組?你似乎從表格中選擇了一個任意的孩子,這並不一定涉及聚合。 –

+0

實際情況有點像,我想在我的前端展示5個產品,每個產品都應該是隨機的,並且應該有一個獨特的父級。我困惑你嗎? :( –