0

私はしばらくの間これを理解しようとしていて、すぐにそれを理解するつもりはないと決めました!よろしくお願いします。この場所が大好きです。

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

日にち:

date_id, user_id, cost, title, description

date_rating:

date_id, user_id, rating

date_id同じであるが異なるuser_id'のエントリが複数あります。言い換えれば、同じ日付の複数の評価。評価は1または-1のいずれかです。すべての評価を同じものと一緒に追加し、それを一致するテーブルにdate_id結合したいと思います。そのため、テーブルに「評価」という列があります。このようにして、評価で並べ替えることができます。簡単そうに聞こえますが、それほど簡単ではないことが証明されています。DBAは私のものではないと思います!DATEdate_idDATE

編集:MySQLクライアントバージョン:mysqlnd 5.0.8-dev --20102224-$ Revision:310735 $

4

3 に答える 3

5

こんなもの使ってみませんか?私はMySQLの専門家ではありませんが、気に留めておいてください(私はSQL Serverの人です):

SELECT
     date_id, user_id, cost, title, description,
     (SELECT SUM(rating) FROM date_rating dr WHERE dr.date_id = d.date_id) AS 'Rating'
FROM 
     date d

相関サブクエリを使用して、指定された各日付の評価の合計を取得しdate_idますか?

于 2012-04-28T20:04:46.220 に答える
1

あなたが使用することができますGROUP BY

SELECT date.*, SUM(date_rating.rating) AS Rating
FROM date JOIN date_rating USING (date_id)
GROUP BY date_id;
于 2012-04-28T20:06:43.020 に答える
0

評価を合計するには、GROUPBYを使用する必要があります。テーブルのコスト列を無視しました。また、user_id列。これら2つのテーブルの間にはdate_idのみが関連しているようです。以下のクエリはSQLServer2012で作成およびテストされていますが、SELECTステートメントはマイナーな変更を加えてもMySQLで機能するはずです。

スクリプト

CREATE TABLE dbo.[date] 
(       
        [date_id]       INT             NOT NULL IDENTITY
    ,   [title]         VARCHAR(100)    NOT NULL
    ,   [description]   VARCHAR(100)    NOT NULL
);

CREATE TABLE dbo.[date_rating]
(       
        [date_id]       INT             NOT NULL
    ,   [user_id]       INT             NOT NULL
    ,   [rating]        INT             NOT NULL
);

INSERT INTO  dbo.[date] ([title], [description]) VALUES
    ('title 1', 'description 1'),
    ('title 2', 'description 2'),
    ('title 3', 'description 3');

INSERT INTO  dbo.[date_rating] ([date_id], [user_id], [rating]) VALUES
    (1, 100, 1),
    (1, 200, -1),
    (2, 200, -1),
    (1, 200, 1),
    (3, 200, 1),
    (1, 200, -1);

SELECT      d.[date_id]
        ,   d.[title]
        ,   d.[description]
        ,   SUM([rating]) AS ratings
FROM        dbo.[date]          d
INNER JOIN  dbo.[date_rating]   dr
ON          d.date_id           = dr.date_id
GROUP BY    d.[date_id]
        ,   d.[title]
        ,   d.[description];

出力

date_id title   description    ratings
------- ------- -------------  -------
1       title 1 description 1    0
2       title 2 description 2   -1
3       title 3 description 3    1
于 2012-04-28T20:11:08.693 に答える