您好我正在编写一个我没有设计的数据库的MySQL请求,并且此时无法真正改变,我有一个问题,我没有对此进行测试,因此可能会按设计工作,但我不是肯定的。
因此,我正在搜索的表只有三列id,title和description,但描述列实际上是以标准化方式存储的其他信息的列表(这是用于音乐元数据,所以它看起来像这样):
id |标题|说明
1 | stairway_to_heaven | artist = led_zeppelin,genre = rock,album = led_zeppelin_iv
我想要做的是编写查询,选择包含字符串zeppelin的所有歌曲
我最初提出的是
"SELECT * FROM table WHERE description LIKE %artist=%zeppelin%"
虽然我认为如果名称出现在说明中,我认为问题就在于我想要找到所有包含摇滚的艺术家的场景,我认为这应该是这样的
"SELECT * FROM table WHERE description LIKE %artist=%rock%"
我的第一个问题是,这会选择行,因为摇滚在艺术家=正确后的行中?
我的第二个问题是,这会解决这个问题吗?
"SELECT * FROM table WHERE description LIKE %artist=%rock% AND WHERE description NOT LIKE %artist=%,%rock%"
我的想法是,如果我省略了在艺术家=和比较标签之间有一个(分隔符)的字符串,它就不会选择上面的行。我的潜在问题是,如果分隔符在艺术家名称中,它将失败,但我应该能够通过选择不在任何字段值中的分隔符并强制执行此属性来解决此问题。
对于任何格式化问题也很抱歉这是我第一次尝试写一个问题。
谢谢, twain249
答案 0 :(得分:1)
您是否有使用正则表达式的经验?如果是,您可以在查询中使用它们来处理这样的情况。请参阅此处的一些示例:http://dev.mysql.com/doc/refman/5.0/en/regexp.html
或者,您可以使用此处定义的“拆分”功能:http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/