2012-07-12 47 views
0

我已经表称为meta_data具有以下结构MySQL的 - 从一个表中的另一个表匹配数据的多个组合,其返回数据

id, fk_id, label, data 

其中fk_id链接到另一个表 - books

meta_data表有条目如:

|id|fk_id|label|data | 
|--|-----|-----|-------| 
|1 |1 |pages|10  | 
|2 |2 |pages|10  | 
|3 |1 |pub |smith | 
|4 |3 |pub |smith | 

我想做一个选择books,其中有meta_data的条目与许多参数匹配,例如pages = 10pub = smith

因此,使用上面的例子,我会得到条目在ID为1的books表中(2和3不会被包含,因为它们与条件之一匹配,但它们不匹配)。

该查询还需要是动态的,因此我可以查询meta_data表中的一个或多个标签/数据组合,例如,我在上面的示例中查询了2个组合,但可能想要在4或5上查询。

此外,在meta_data表中可能有多个条目具有相同标签但数据值不同。例如可能会有另一行:

|5 |1 |pub |jones | 

任何人都可以给我一个这个查询如何使用MySQL的例子吗?

+0

SHOW CREATE TABLE books; SHOW CREATE TABLE meta_data; – Sebas 2012-07-12 13:05:37

回答

1

这是您在问题中指定的条件的示例。如果您希望条件更具动态性,您应该在应用程序中动态构建查询。

Select b.book_name from books b, meta_data m, meta_data md 
WHERE b.id = m.fk_id and b.id = md.fk_id 
and m.label ='pages' and m.data = 10 
and md.label ='pub' and md.data='smith' 
相关问题