0

データベースに、衣料品店のトピック(新着、トップセラー、男性、女性、子供など)のカテゴリを保持するカテゴリというフィールドがあります。

私には次のレコードがあります:新着、男性2番目のレコードには次のレコードがあります:新着、女性

データベースをクエリして、女性だけまたは男性だけを選択するにはどうすればよいですか?

私はこれに疲れました:SELECT * FROM products WHERE categories RLIKE [[:<:]]Men[[:>:]]'

これは男性には効果がありますが、女性には効果がありません。

4

5 に答える 5

4

「男性」または「女性」という単語を実際に保存している場合、データベースが正しく設定されていません。

リンクされたテーブルを使用する必要があります。たとえばcategories、製品をカテゴリにリンクします。

次に、次のようなことを行うことができます。

SELECT * FROM products p
JOIN categoriesToProducts ctp ON ctp.productId = p.productId
JOIN categories c ON c.categoryId = ctp.categoryId
WHERE c.categoryName = "Men"; 
于 2012-07-06T14:02:27.557 に答える
1

これを使用するだけです:

SELECT * FROM products WHERE categories LIKE 'Men%';
SELECT * FROM products WHERE categories LIKE 'Women%';

正しい%のみを使用してください

于 2012-07-06T14:04:59.723 に答える
1

を使用できます。find_in_set functionこの例をご覧ください

mysql> select * from fruits;
+-------------------------------+
| fruit                         |
+-------------------------------+
| banana, apple, orange, grapes |
+-------------------------------+
1 row in set (0.00 sec)

mysql> select * from fruits where find_in_set('banana',fruit);
+-------------------------------+
| fruit                         |
+-------------------------------+
| banana, apple, orange, grapes |
+-------------------------------+
1 row in set (0.00 sec)

したがって、次のようなものを試してください。

SELECT * FROM products WHERE categories where find_in_set('men',categories)'

後の単語,がまったく同じで、余分なスペースがないことを確認してください

于 2012-07-06T14:08:37.673 に答える
-1

アプローチを単純化することもできます。

SELECT * FROM products WHERE categories = 'Men';
SELECT * FROM products WHERE categories = 'Women';

「Men」は「WoMEN」の一部であるため、これがSQLに問題がある理由である可能性がありますか?

ただし、私の注意を引いたので、DBに長い文字列が含まれている可能性があるため、これも実行できる可能性があります。

SELECT * FROM products WHERE categories = 'New Arrival, Men';
SELECT * FROM products WHERE categories = 'New Arrival, Women';
于 2012-07-06T14:06:23.903 に答える
-1

「女性」の選択に問題はないので、男性の場合は次のようなクエリを使用して解決できます。

SELECT * FROM products WHERE categories LIKE '% Men';

文字「M」の前にスペースを入れるだけです。

于 2012-07-06T14:49:31.160 に答える