建筑分割
Building segmentation
我正在尝试为图书馆应用程序构建高级搜索功能。我有的是 Books
和他们的 Properties
.
所以如果书籍是:
1 LOTR
2 Harry Potter 1
3 Harry Potter 2
属性为
id book_id key value
1 1 available 0
2 2 available 10
3 2 author Tolkien
4 3 author Rowling
5 2 price 150
6 3 price 163
我需要的是找到具有以下内容的书籍price = 150 and author = (null or Tolkien)
根据我的能力,我已经能够通过 properties
上的 2 个连接来做到这一点,但是,唉,这无济于事(这可能会继续到 10 个连接)。有没有更好的方法来实现这一点?
可能不是最优雅的,但一种选择是 COUNT
增加符合条件的行数,并且只有 return book_ids 符合所有条件:
SELECT book_id FROM (
SELECT book_id
FROM Properties
WHERE
(key = 'price' AND value = 150) OR
(key = 'author' AND (value IS NULL OR value = 'Tolkein'))
-- OR condition 3 etc.
) M
GROUP BY book_id
HAVING COUNT(*) = 2
我正在尝试为图书馆应用程序构建高级搜索功能。我有的是 Books
和他们的 Properties
.
所以如果书籍是:
1 LOTR
2 Harry Potter 1
3 Harry Potter 2
属性为
id book_id key value
1 1 available 0
2 2 available 10
3 2 author Tolkien
4 3 author Rowling
5 2 price 150
6 3 price 163
我需要的是找到具有以下内容的书籍price = 150 and author = (null or Tolkien)
根据我的能力,我已经能够通过 properties
上的 2 个连接来做到这一点,但是,唉,这无济于事(这可能会继续到 10 个连接)。有没有更好的方法来实现这一点?
可能不是最优雅的,但一种选择是 COUNT
增加符合条件的行数,并且只有 return book_ids 符合所有条件:
SELECT book_id FROM (
SELECT book_id
FROM Properties
WHERE
(key = 'price' AND value = 150) OR
(key = 'author' AND (value IS NULL OR value = 'Tolkein'))
-- OR condition 3 etc.
) M
GROUP BY book_id
HAVING COUNT(*) = 2