首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql根据当前项目选择相关项目

mysql根据当前项目选择相关项目
EN

Stack Overflow用户
提问于 2012-10-30 16:59:35
回答 3查看 770关注 0票数 1

我有一个场景,假设3个用户评论一个id为10的企业,我如何才能获得评论该企业的用户的所有唯一id,并使用该唯一id找到另一个不等于10的企业评论?

样表user_review:

代码语言:javascript
复制
review_id | user_id | business_id | rating | review_date
  1           2          10           3       20121030124001
  2           2          9            3       20121022120627
  3           2          10           4       20121023120627
  4           3          10           4       20121024120627
  5           3          6            3       20121022140627
  6           4          10           2       20121025120627
  7           4          10           5       20121030120627
  8           3          10           2       20121010120627
  9           4          8            5       20121028120627

我应该得到这些结果

代码语言:javascript
复制
review_id | user_id | business_id | rating | review_date
  2           2          9            3       20121022120627
  5           3          6            3       20121022140627
  9           4          8            5       20121028120627

在上面的结果中,如果对相同的user_id和相同的business_id有两次评论,则最新的一次应该是return.Thanks

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-30 17:04:41

尝试此查询:

以下是指向sqlfidle链接,其中包含运行的results http://sqlfiddle.com/#!2/cd4ea/1

代码语言:javascript
复制
SELECT
  tblreview.*,tblusers.user_name
FROM
  (
      SELECT
           MAX(tblreview.review_id) review_id
           , tblreview.user_id
      FROM
          (
            SELECT
                DISTINCT user_id
            FROM
               tblreview
            WHERE business_id = 10
          ) reviewsb10
      INNER JOIN
           tblreview
      ON
           tblreview.user_id = reviewsb10.user_id
      AND
           tblreview.business_id <> 10
      GROUP BY
           user_id
  ) tblLastReviewPerUser
INNER JOIN
  tblreview
ON
  tblreview.review_id = tblLastReviewPerUser.review_id
INNER JOIN
  tblusers
ON
  tblusers.user_id = tblLastReviewPerUser.user_id
票数 2
EN

Stack Overflow用户

发布于 2012-10-30 17:02:24

代码语言:javascript
复制
SELECT t1.*
FROM TableName t1
INNER JOIN 
(
    SELECT user_id, business_id, MAX(review_date) review_date
    FROM TableName
    WHERE business_id <> 10
    GROUP BY user_id, business_id
) t2 ON  t1.user_id = t2.user_id 
     AND t1.review_date = t2.review_date
     AND t1.business_id = t2.business_id
票数 0
EN

Stack Overflow用户

发布于 2012-10-30 17:34:53

尝试这个查询-

代码语言:javascript
复制
SELECT * FROM (
    SELECT * FROM user_review
    ORDER BY IF(business_id = 10, 1, 0), review_date DESC
  ) t
GROUP BY user_id
HAVING
  COUNT(IF(business_id = 10, 1, NULL)) > 0
  AND COUNT(IF(business_id <> 10, 1, NULL)) > 0

+-----------+---------+-------------+--------+----------------+
| review_id | user_id | business_id | rating | review_date    |
+-----------+---------+-------------+--------+----------------+
|         2 |       2 |           9 |      3 | 20121022120627 |
|         5 |       3 |           6 |      3 | 20121022140627 |
|         9 |       4 |           8 |      5 | 20121028120627 |
+-----------+---------+-------------+--------+----------------+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13135580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档