我正在尝试在PHP中创建一个小脚本来从MySQL数据库获取数据。在我的数据库中,"公司"是一个名为类别的列,我在其中存储了公司的类别。例如"1|2"或只是"2"。
现在我想搜索"2",我的数据库将返回带有"1|2"和"2"的两个条目 - 但这是我的问题。我尝试了 LIKE % 等,但没有任何效果如我所希望的那样。
有人可以帮助我使用我的小PHP脚本吗?
我认为以你的方式存储类别是一个坏主意。如果您使用LIKE "%2"
或LIKE "%2%"
或LIKE "2"
声明来获得属于类别"2"的公司,您将收到具有类别的公司,例如 21|12
.
最好从公司表中删除类别。并添加 2 个新表:类别(id、名称)和company_category(id、compnay_id、category_id)。这就是它在RDMS中必须的方式。但是,如果你有重要的论据,为什么你这样做 - 这是你的交易。
在这种情况下,我建议将类别包装在额外的|
符号中以获取|1|2|
或|1|3|23|
并使用LIKE "%|2|%"
语句。
我希望这对你有所帮助。
SELECT * FROM cat_baza WHERE subsection = ".$row['id']." or subsection LIKE('%|".$row['id']."|%') or subsection LIKE('".$row['id']."|%') or subsection LIKE('%|".$row['id']."');
尝试
SELECT * FROM table
WHERE category LIKE %2% AND NOT LIKE '%|%'
试试这个
SELECT * FROM table
WHERE category='2' OR category LIKE '%|2' OR category LIKE '2|%'
SELECT * FROM table
WHERE category REGEXP '.*2.*'
正则表达式应该可以工作