0

MySQL の問題を解決しようとしています。2 つのテーブルがあります。

  1. CATEGORIES(列: _id、_name)
  2. POSTS(列: _id、_category、_title、_text)

の _category フィールドPOSTSは、PHP 関数の implode(",") を使用して、 のみで区切られたLONGTEXT複数の _ID を持つことができます。CATEGORIES

PHP を使用して、最も人気のある 10 のカテゴリをリストし、それらの投稿を () 内に表示しようとしましたが、うまくいきませんでした。

私はMySQLにあまり詳しくありません.SELECT FROM WHERE ORDER LIMIT、INSERT、UPDATEの使い方しか知らないので、誰かが私に良い解決策を教えてくれたらとても嬉しいです. IN() を使用しようとしましたが、IN() には _category フィールドがPOSTSこの '1'、'2'、'3'、'4' のようになる必要があり、現在は引用符なしで 1,2,3,4 になっているため、 FIELD TYPE SETなしでこのフィールドをリストに変換する方法を誰かが知っていれば、私はとても幸せです。

4

4 に答える 4

2

リレーション モデルを次のように変更できます。

表 CATEGORIES の列:

  • _id
  • _name

列を持つ表 POSTS:

  • _id
  • _title
  • _text

表 POSSESS の列:

  • post_id(外部キー)
  • category_id(外部キー)

POSSESS 関係 (テーブル) のタプルpost_idは、 がcategory_idカテゴリにあることを意味します。

于 2012-04-25T16:32:01.763 に答える
0

私はこれを使用しました:

SELECT *, (SELECT COUNT(*) FROM offer WHERE FIND_IN_SET(type._id, offer._type)) AS _count FROM type ORDER BY _count DESC LIMIT 0, 10

今のところ、そのテーブル タイプ (列: _id、_name) とオファー (列: ..、..、_types、

于 2012-04-26T22:41:54.123 に答える
0

これのキーワードは「多対多」の関係です。可能であれば、Mark Ba​​ker が書いたようにスキームをリファクタリングしてください。

于 2012-04-25T16:33:44.393 に答える
0

Dyin が提案したモデルを使用すると、次のようなものを使用して、人気度の上位 10 カテゴリを一覧表示します (カテゴリの投稿数が多いほど、人気が高いと仮定します)。

SELECT 
  c.*, # get all values for rows in categories
  count(p.post_id) AS post_count # here we are counting the posts for each category using a field alias for the count
FROM (
  categories AS c, # we are aliasing the tables also to shorten the typing a bit
  possess AS p     # you could also use aliases to join the same table multiple times
)
WHERE 
  c.id = p.category_id # link the categories and the possess tables
GROUP BY c.id # without this, the query would just count all posts, this way the result set is separated into groups by category
ORDER BY post_count DESC 
LIMIT 10

SQL の経験についてあなたが言ったことを考えると、このクエリは今のところ少しやり過ぎに思えるかもしれませんが、いつものように、Google はあなたの友達です。外部キーと結合を使用してテーブルをリンクする方法を調査することから始めます。

于 2012-04-25T16:53:25.893 に答える