2013-02-06 38 views
2

我不得不幻燈片測試頁面在這裏就有關具體要求: http://bybyweb.com/mealbook/從3個隨機類別的MySQL(及以上)4個隨機項目

所有的大型圖片應該是從隨機類別的圖像,有三個食譜從文本中列出的那個類別。 小縮略圖應顯示任何類別的隨機食譜。

所以,應該有3個隨機大類,12個食譜從這些類別(4分組)9個隨機食譜,無關休息...

數據庫方案: 類:身份證,職稱, PARENT_ID category_to_recipe:身份證,·REC_ID,CAT_ID(此表是存在的,因爲配方可以在多個類別) 食譜:ID,姓名,等等,等等...

此查詢:

SELECT category_recipe.rec_id, category_recipe.cat_id, recipes.name, recipes.url, recipes.main_image, categories.id, categories.title 
FROM recipes, category_recipe, categories 
WHERE categories.id 
IN (10, 30, 64) 
AND category_recipe.cat_id = categories.id 
AND category_recipe.rec_id = recipes.id 
ORDER BY RAND() 
LIMIT 12 

從3個類別返回12個隨機食譜,但我需要每個類別4個食譜... 我想有更多可能的解決方案,並且我可能需要嵌套選擇,或者什麼......

+0

看看這個,可能會給一些輸入http://stackoverflow.com/questions/31495446/how-to-get-random-records-from-each-category-in-mysql/31496011?noredirect=1#comment50972156_31496011 –

回答

0

我認爲你需要union all此:

SELECT cr.rec_id, cr.cat_id, r.name, r.url, r.main_image, c.id, c.title 

from ((select cr.* from category_recipe where cat_id = 10 order by rand() limit 4 
    ) union all 
     (select cr.* from category_recipe where cat_id = 30 order by rand() limit 4 
    ) union all 
     (select cr.* from category_recipe where cat_id = 64 order by rand() limit 4 
    ) cr join 
    categories c 
    on cr.cat_id = c.id join 
    recipes r 
    on cr.rec_id = r.id 

此外,你應該使用ANSI標準聯接語法。通過使用別名,您的查詢也會更具可讀性。

+0

太棒了,像魅力一樣工作!謝謝! – sinisake

0

我會分裂對於3個類別中的每一個的查詢,我沒有看到使它變得如此複雜的原因,當那些選擇非常簡單時,如果速度是您的問題,將會快速發展。

+0

是的,我很關心速度(因爲這只是頁面上的一個元素,並且會有更多的數據庫請求)。所以,你建議我用第一個查詢選擇3個隨機類別,然後,當我得到id's - >爲每個配方組做3個分開的查詢(所以我可以得到4個食譜每個類別),然後一個查詢其餘的食譜(縮略圖)? – sinisake