0

だから私は2つのテーブルを持っています

表1

    id      username      category

    1       nick          1, 2

テーブル2

    id      category
    1        friend
    2        enemy
    3        neutral

今、コンマ区切り値の table1 カテゴリ リストに表示されない ID を持つカテゴリだけのリストを印刷したいと考えています。たとえば、この場合は「中立」です。私がアイデアから外れているのを助けていただければ幸いです。

4

2 に答える 2

5
SELECT  b.*
FROM    table2 b 
        LEFT JOIN table1 a
            ON FIND_IN_SET(b.ID, a.category)
WHERE   a.category IS NULL

テーブルを適切に正規化することを検討してください。コンマで区切られた値を単一の列に保存することはお勧めできません。データベースが大きいとすぐに問題が発生します。これが私の提案したスキーマです:

表 1 - ユーザーリスト

  • ユーザー ID (PK)
  • ユーザー名

表 2 - カテゴリ リスト

  • カテゴリ ID (PK)
  • 種別名

表 3 - User_Category

  • UserID (FK) (CategoryID の PK も)
  • カテゴリ ID (外部キー)
于 2013-04-29T13:44:19.627 に答える
0

それについて何がそんなに難しいのですか?まず、クエリを実行しますselect category from table1(たとえば、結果を $res に格納します)。次に、ループのようなwhile($arr = $res->fetch_row())方法でこのユーザーに使用されるカテゴリの配列を取得し、使用されている$ids = explode(",",$arr[0])すべての is のリストに追加します (のように$all_ids = array_merge($all_ids, $ids))。

これで、使用されたすべての ID の配列ができました。今度は、クエリselect * from table2とループを使用while($row = $res->fetch_row)して doを実行しますif($row[0] not in $all_ids)$free_cats[]=$row[1]

この $free_cats 配列から文字列を作成する方法を理解していただければ幸いです。

于 2013-04-29T13:58:50.980 に答える