2017-12-21 17 views
-1

결과가 합계가 100보다 작 으면 마지막 데이터를 업데이트하는 OR/AND를 반환하는 MySql 쿼리를 찾고 있습니다. 다음 n 개의 행은 100으로 완료됩니다.MySQL 지난 6 개월 전에 선택하거나 결과 합계가 100보다 작 으면 마지막으로 삽입 된 행 100 개

CREATE TABLE `content` (
    `id` int(11) NOT NULL, 
    `id_cat` int(11) NOT NULL, 
    `title` text, 
    `lastUpdate` date NOT NULL, 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

ALTER TABLE `content` 
    ADD PRIMARY KEY (`id`); 

ALTER TABLE `content` 
    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10175; 

쿼리의 첫 번째 부분은 다음과 같습니다 :

테이블 쿼리를 만들

SELECT * 
FROM content, 
    categories 
WHERE categories.id = content.id_cat 
    AND lastUpdate > DATE_SUB(now(), INTERVAL 6 MONTH) 
ORDER BY lastUpdate DESC, 
     content.id DESC, 
     content.title ASC 

나는이 작업을 수행하는 설명을 찾을 수 없습니다. 누군가 나를 도울 수 있니?

+1

'다음 n 행이 100'에 완료 ...이 "다음 n 행이"무엇을 결정하는 논리가 무엇을 다음과 같이

한 가지 방법은 무엇입니까? –

+1

현재 주문을 사용하여 stop-gap 레코드를 선택하려면 (쿼리가 그보다 작은 경우를 대비하여 총 100 개를 만들려면) 'DATE_SUB' 검사를 제거하고' LIMIT 100 '을 입력하십시오. –

+0

이 쿼리는 마지막 업데이트 된 기사를 반환합니다. 그러나 모든 기사가 6 개월 이상 업데이트 된 경우 표시 할 항목이있는 n (100?) 마지막 삽입 된 ID를 선택하고 싶습니다. 그리고이 시간에 업데이트 된 기사가 두 개만있는 경우 마지막 삽입 된 기사를 98 개 선택하고 싶습니다. –

답변

0

나는이 질문을 이해하면서 지난 6 개월 내에 모든 기록을 원한다. 해당 세트의 레코드 수가 100 개 미만이면 가장 최근의 레코드 100 개를 선택하십시오.

SELECT * 
FROM content 
INNER JOIN categories 
ON categories.id = content.id_cat 
WHERE lastUpdate > DATE_SUB(now(), INTERVAL 6 MONTH) 
OR content.id IN (SELECT content.id FROM content 
INNER JOIN categories 
ON categories.id = content.id_cat 
ORDER BY lastUpdate DESC, 
     content.id DESC, 
     content.title ASC 
LIMIT 100) 

ORDER BY lastUpdate DESC, 
     content.id DESC, 
     content.title ASC 
+0

고맙습니다. TOP "는 MySQL에서 사용할 수 없습니다. SQL Server (https://www.w3schools.com/sql/sql_top.asp)에서만 가능합니다. –

+0

Top 대신 LIMIT 100을 사용하도록 검색어가 변경되었습니다. –