MySQL データベースからデータを取得するために PHP で小さなスクリプトを作成しようとしています。私のデータベースの「会社」は、会社のカテゴリを保存するカテゴリと呼ばれる列です。たとえば、「1 | 2」または単に「2」です。
今、「2」を検索したいのですが、データベースは「1 | 2」と「2」の2つのエントリを返しますが、それが私の問題です。LIKE % などで試してみましたが、思うように動作しませんでした。
私の小さな PHP スクリプトを手伝ってくれる人はいますか?
あなたのやり方でカテゴリを保存するのは悪い考えだと思います。カテゴリ「2」に属する会社を取得するためにLIKE "%2"
orLIKE "%2%"
またはステートメントを使用すると、たとえば などのカテゴリの会社が返されます。LIKE "2"
21|12
会社のテーブルからカテゴリを取り除いたほうがよいでしょう。そして、category(id, name) と company_category(id, compnay_id, category_id) の 2 つの新しいテーブルを追加します。これは、RDMS にある必要がある方法です。しかし、あなたがそうする理由が重い議論を持っているなら、それはあなたが対処することです.
この場合、追加の|
-symbol でカテゴリをラップして get|1|2|
または|1|3|23|
and usingLIKE "%|2|%"
ステートメントを使用することをお勧めします。
これがお役に立てば幸いです。
試す
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 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 REGEXP '.*2.*'
正規表現が機能するはずです