在MySQL中搜索 - 分隔列

时间:2012-10-15 10:54:51

标签: php mysql

我正在尝试在PHP中创建一个小脚本来从MySQL数据库中获取数据。 在我的数据库中,“公司”是一个名为category的列,我将公司的类别存储在其中。例如“1 | 2”或“2”。

现在我想搜索“2”,我的数据库将返回带有“1 | 2”和“2”的两个条目 - 但这是我的问题。 我用LIKE%等尝试过,但没有像我希望的那样有效。

有没有人可以帮我解决我的小PHP脚本?

5 个答案:

答案 0 :(得分:2)

我认为以你的方式存储类别是一个坏主意。 如果您使用LIKE "%2"LIKE "%2%"LIKE "2"语句来获取属于“2”类别的广告,您将收到包含类别的公司,例如21|12

最好从公司表中删除类别。并添加2个新表:category(id,name)和company_category(id,compnay_id,category_id)。这就是它在RDMS中的必要性。 但是,如果你有重要的论据,为什么你这样做 - 这是你的交易。

在此我建议用其他| - 符号包装类别以获取|1|2||1|3|23|并使用LIKE "%|2|%"语句。

我希望这会对你有所帮助。

答案 1 :(得分:-1)

SELECT * FROM cat_baza WHERE subsection = ".$row['id']." or subsection LIKE('%|".$row['id']."|%') or subsection LIKE('".$row['id']."|%') or subsection LIKE('%|".$row['id']."');

答案 2 :(得分:-1)

尝试

SELECT * FROM table
WHERE category LIKE %2% AND NOT LIKE '%|%'

答案 3 :(得分:-1)

试试这个

SELECT * FROM table 
WHERE category='2' OR category LIKE '%|2' OR category LIKE '2|%' 

答案 4 :(得分:-1)

SELECT * FROM table 
WHERE category REGEXP '.*2.*'

正则表达式应该工作