我正在尝试在 PHP 中创建一个小脚本来从 MySQL 数据库中获取数据。在我的数据库中,“公司”是一个名为“类别”的列,我将公司的类别存储在其中。例如“1 | 2”或只是“2”。
现在我想搜索“2”,我的数据库将返回这两个带有“1|2”和“2”的条目——但这是我的问题。我用 LIKE % 等进行了尝试,但没有像我希望的那样工作。
有人可以帮我解决我的小型 PHP 脚本吗?
我认为以您的方式存储类别是一个坏主意。如果您使用LIKE "%2"
or LIKE "%2%"
orLIKE "2"
语句来获取属于类别“2”的公司,您将收到具有类别的公司,例如21|12
。
最好从公司表中删除类别。并添加 2 个新表:category(id, name) 和 company_category(id, compnay_id, category_id)。这就是它必须在 RDMS 中的方式。但是,如果您有重要的论据,为什么要这样做-这就是您的交易。
在此,我建议将类别包装在附加的|
-symbol 中以获取|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.*'
正则表达式应该工作