我有两个表property_description
和property_extras
。混淆mysql查询
表property_description
看起来像
id location price etc etc
1 New York 3000 v v
表property_extras
看起来像
property_id extras
1 12,14,16,167
嘛,问题是如何MySQL查询看起来返回结果只有当群众演员的至少一个匹配?
我有两个表property_description
和property_extras
。混淆mysql查询
表property_description
看起来像
id location price etc etc
1 New York 3000 v v
表property_extras
看起来像
property_id extras
1 12,14,16,167
嘛,问题是如何MySQL查询看起来返回结果只有当群众演员的至少一个匹配?
理论上,应该有额外归喜欢
property_id extra_id
1 12
1 14
...
如果您无法将数据库结构转换成类似这个,那么你必须做一些(可怕的),如:
SELECT property_id FROM property_extras WHERE
extras LIKE '12,%' OR extras LIKE '%,12,%' OR extras LIKE '%,12'
或者,如果你可以插入逗号开始和像,12,14,...,
年底为delphist指出的那样,简单地说:
SELECT property_id FROM property_extras WHERE extras LIKE '%,12,%'
我仍然在绘制数据库设计草图。 那么,如果我使用规范化,应该如何查询查询? – brodo 2011-02-23 13:20:23
'SELECT * FROM property_description INNER JOIN property_extras ON property_description.id = property_extras。property_id WHERE extra_id = 12'。你应该确保每个额外部分与每个属性最多关联一次,也就是说,'property_extras'上应该没有相同的行。在规范化的模式中这很容易完成,就像在两个字段上设置唯一的索引(或主键)一样简单。 – 2011-02-23 13:28:27
是的,但如果不止一个exta被选中,应该如何查询查询。 例如选择12,17,34,19,40,90,19。 我应该使用AND吗? – brodo 2011-02-23 13:39:01
您是否可以在行的开始和结束处填写每行extras
行,
(例如,12,14,16,167,
)?
,那么这将很好地工作
SELECT FROM `property_description` LEFT JOIN `property_extras` WHERE `property_extras`.`extras` REGEXP ',(13|14|166),'
或
SELECT FROM `property_description` LEFT JOIN `property_extras` WHERE `property_extras`.`extras` REGEXP ',14,'
虽然可以使用的模式,因为它代表,以正确的方式解决问题的办法是normalize your database
你应该每行增加一行。不要将数据结构存储在数据库中。 – Quentin 2011-02-23 13:05:54
那么'id'和'property_id'是一组匹配的字段吗?所以他们会有相同的价值权利?你只是想检查一个记录是否存在'property_extras'与一个匹配的ID?如果是的话返回一个结果,否则返回什么? – 2011-02-23 13:07:01
你的意思是“一对多”的概念? – brodo 2011-02-23 13:07:26