2011-05-16 100 views
0

在我的Rails應用我有三個表處理課程和類之間的許多一對多的關係SQL在多個維度過濾與許多一對多的關係

  • 課程
  • course_categories_courses
  • course_categories

我有類別的組,我想允許的課程按類別上市的過濾通過類似的接口:

位置

  • 非常接近
  • 附近

類型

  • 媒體
  • 長期

要搜索平臺類型的遠近,我曾想過使用:

SELECT distinct courses.* 
FROM `courses` 
    inner join course_categories on 
    course_categories_courses.course_category_id = course_categories.id 
    and (
     course_categories.id in ('medium') 
     and course_categories.id in ('near', 'far') 
    ) 

但不工作。任何人都能指出我正確的方向嗎?

回答

0

你一般要投入到「關係」作爲加入條件,和值(文字),通過在where子句

前進行篩選。加入條件 - on course_categories_courses.course_category_id = course_categories.id

ex。 where子句 - where course_categories.id in ('near', 'far')

因此,您可能希望以這種方式重寫您的查詢。但更重要的是,這兩種可能性如何都是真實的?

(course_categories.id in ('medium') and course_categories.id in ('near', 'far')) 

這是你的意圖嗎?

+0

這可能是問題的關鍵。我的course_categories_courses表包含course_categories_id和course_id,使用我的示例數據,有以下記錄: - course 1 |中等 - 課程1 |近 - 課程2 |遠 - 課程2 |短 我希望它只返回課程1.目前,它不返回。 – Denseflux 2011-05-16 17:35:54

+0

我認爲jny已經明白了。第二個(近/遠)部分應該是'location',而不是'id' – 2011-05-16 18:57:11

0

你必須加入兩個表,並且使用ID字段,其中類型和位置(根據你的描述),應使用

SELECT distinct courses.* FROM `courses` 
inner course_categories_courses on course_categories_courses.course_category_id = courses.course_category_id 
inner join course_categories on 
course_categories.id = course_categories_courses.id 
where (course_categories.type in ('medium') and course_categories.location in ('near', 'far')) 
0

Syntactaclly你寫的查詢是罰款。有其他人注意到它有兩件不尋常的事情

  1. 在內部連接上過濾。 (通常在哪裏完成,但也許你有你的理由)
  2. course_categories.id in ('medium')。大多數人會希望在這裏有一個數字,但也許這只是爲了演示的目的。

它的原因「不工作」

  1. 你得到你已經在你的Ruby掃到地毯下一個錯誤,你不分享
  2. 它只是在那裏工作沒有符合條件的記錄。

調試方法

  1. 在工作臺(或其他客戶端)運行它,並檢查結果
  2. 如果沒有錯誤,沒有記錄返回運行一些查詢在工作臺

    Select count(*) from course_categories where course_categories.id in ('medium')

    Select count(*) from course_categories where course_categories.id in ('near', 'far')

  3. 如果你在Workbench中得到了你想要的結果,那麼它可能是你的客戶端(Ruby)代碼,壞連接字符串p erhaps?

+0

非常感謝。是的,出於演示目的,它是一個ID。我一直在Workbench中運行 - 所以從這個角度來看它是可以的。你寫的查詢返回1和2,這是預期的。感謝您的貢獻。 – Denseflux 2011-05-16 17:29:11

+0

@Denseflux所以你可以在WorkBench中得到預期的效果,但不能在Ruby中使用?聽起來像是一個Ruby問題給我。對不起,我不是一個Ruby人。 – 2011-05-16 19:04:43