-1

私はこのようなスキーマを持っていWHEREますORDER BY.

たとえば、category.id = x および cartable.status = 3 および user.id = 4 ...

news
-------------------------------------------------------
id*     title

category
-------------------------------------------------------
id*     title

cartable
-------------------------------------------------------
id          user_id         status*

news_category
-------------------------------------------------------
news_id     category_id

news_cartable
-------------------------------------------------------
news_id     cartable_id

user
-------------------------------------------------------
id*     name

申し訳ありませんが、更新されました。問題はこれです:各ニュースには多くのカテゴリがあり、多くのカートテーブルもあります..各カートブルにはユーザーがいます。そのフィールドでソートまたは条件付けするにはどうすればよいですか

select * from news_category
left join news on (news_category.news_id = news.id)
left join category on (news_category.category_id = category.id)
--- cartable and user ???
4

2 に答える 2

0

はい、すべてのテーブルが関連しているように見えるため、これらの値のいずれかが where 句または order by で使用される可能性があります。正確な出力がある場合は、それと、試したクエリを含めてください。誰かが助けてくれます。

于 2012-07-10T14:26:15.977 に答える
0

あなたの差し迫った質問に答えるために、はい、できます。テーブルが互いに何らかの関係を持っている限り、 and を使用WHEREORDER BYてクエリを条件付けできます。

たとえば、関連付ける必要がある場合user(newsまたは、互いに直接関連付けられていないテーブル)、リンクuserする関係のチェーン内にあるすべてのテーブルを宣言する必要がありますnews(つまり: news_cartableand cartable)、WHEREまたはとして、ONそれらを相互にリンクするステートメント (例: WHERE cartable_id = cartable.id AND user_id = user.id)。したがって、特定のnewsエントリにリンクされたユーザーを照会する場合、コードは次のようになります。

SELECT user.id FROM user, cartable, news_cartable, news
WHERE news.id = news_id AND cartable_id = cartable.id AND user_id = user.id
AND news.id = {some news ID}

LEFT JOIN代わりにテーブルが必要な場合は、2 行目の条件を取得して、次のようにステートメントとして記述ONできます。

FROM news
LEFT JOIN news_cartable ON news.id = news_id
LEFT JOIN cartable ON cartable_id = cartable.id
LEFT JOIN user ON user_id = user.id

それもあなたが目指しているものではない場合は、具体的に何をしようとしているのかを述べてください.

EDIT:ORDER BY条件付きではなく、あなたがしているどの列でも使用できますSELECT。もちろん、注意点はSELECT、クエリで最初に編集する必要があることです。

于 2012-07-10T14:50:02.937 に答える