2014-09-05 8 views
1

나는이 사용자 범주 버튼을 따른다. 해당 버튼을 클릭하면 해당 레코드가 following_follower_categories에 저장됩니다. 내가 그들의 이름을 가진case와 limit를 사용하여이 mysql 쿼리를 처리하는 방법

테이블 카테고리, following_follower_categories는, 북마크,

1) 책갈피처럼 자신의 분야를 가진 을 user_bookmarks 내 범주에 해당 범주에 대한 자신의 기록을 원하지는 ID 및 기타 세부 사항

을 포함

2) user_bookmarks 테이블

user_id, bookmark_id ,

3)

을 following_follower_categories CATEGORY_ID

**** 난 다음입니다 누구에 USER_ID (다른 USER_ID) **

follower_user_id (현재 사용자 ID)

follower_category_id (여기서 내 북마크 이동)

category_id (다른 사용자 ca tegory_id) 아이디, cat_name, 내가 cateogory 사람 다음입니다 때 달성되고 싶어 이제

을 USER_ID

4) 카테고리 I 한계 내 해당 카테고리 에 자신의 artilce를 원하고 조건은입니다.

여기에 내가 시도한 mysql 쿼리가 있습니다.

SELECT t.* 
    FROM (SELECT f.category_id cat_id, 
       `user_bookmarks`.`id` AS `user_bookmark_id`, 
       `bookmark_id`, 
       `user_bookmarks`.`user_id`, 
       `user_bookmarks`.`category_id`, 
       `bookmark_website`, 
       `bookmark_title`, 
       `bookmark_preview_image`, 
       `pdf_txt_flag`, 
       `youtube_video`, 
       `snapshot_preview_image`, 
       (CASE 
        WHEN `user_bookmarks`.`category_id` = 
               f.follower_category_id 
         THEN (SELECT * 
           FROM `user_bookmarks` ub 
           WHERE ub.category_id= f.follower_category_id) 
         ELSE 0 
       END) `mode`, 
       @r:= CASE 
         WHEN `user_bookmarks`.`category_id` = @g THEN @r+1 
         ELSE @r:=1 
        END `rank`, 
       @g:=category_id 
      FROM `user_bookmarks` 
       LEFT JOIN `following_follower_categories` f 
        ON f.follower_category_id =`user_bookmarks`.`category_id` 
       LEFT JOIN `bookmarks` 
        ON `user_bookmarks`.`bookmark_id` = `bookmarks`.`id` 
       LEFT JOIN `categories` 
        ON `user_bookmarks`.`category_id` = `categories`.`id` 
       JOIN (SELECT @r:=0,@g:=0) t1 
     WHERE `user_bookmarks`.`category_id` IN (161, 
                83, 
                107, 
                73) 
     ORDER BY `user_bookmarks`.`created_at` DESC) t 
WHERE t.rank <=10 

나는 위의 쿼리가 잘못되었다는 것을 알고 있습니다. 아무도 나에게이 일을하는 방법을 알 수 있습니까? 우리는 mysql 자체에서이를 처리 할 수 ​​있는가?

여기 내 기대되는 출력입니다. 내가

+1

테이블에 대한 샘플 데이터와 예상 결과 세트를 제공해주십시오. –

+0

@ NevilleK : 결과 집합을 만드는 데 너무 많은 시간이 걸립니다. – kamalpreet

+0

@NevilleK : 업데이트 질문이 있습니다. – kamalpreet

답변

0

하나의 문제는 mode 열에 대한 표현처럼 보인다 및 제한 조항 내에서

enter image description here

감사합니다 그것을 이 필요합니다. CASE 표현식의 부속 조회는 하나의 표현식과 하나의 행을 리턴해야합니다. SELECT *이 아니라 SELECT <expr>이어야하며 두 개 이상의 행을 반환 할 가능성이있는 경우 LIMIT 1 절이 있어야합니다.

두 개 이상의 표현식이 필요한 경우 다른 하위 쿼리를 사용하여 CASE 표현식을 반복해야하거나 JOIN 작업이 필요할 수 있습니다.

관련 문제