각 OR에 대해 LIMIT 1과 같은 방법이 MySQL에 있는지 궁금합니다. 마찬가지로 MySQL 문 SELECT * FROM posts WHERE username = 'Johnny' OR username = 'Matthew' OR username = 'Andy' OR username = 'Sandra' ORDER BY date DESC
이 있지만 각 사용자 이름 (또는이 경우에는 각 사람의 최신 게시물) 하나만 결과를 반환하고 싶습니다. 나는 SELECT * FROM posts WHERE (username = 'Johnny' LIMIT 1) OR (username = 'Matthew' LIMIT 1) OR (username = 'Andy' LIMIT 1) OR (username = 'Sandra' LIMIT 1) ORDER BY date DESC
을 시도했지만 그게 내가 생각할 수있는 전부이다. 미리 감사드립니다. MatthewMySQL 한계 한도 OR
답변
당신은 별도의 쿼리 결합 UNION
를 사용할 수 있습니다 또는
(SELECT * FROM posts WHERE username = 'Johnny' LIMIT 1)
UNION ALL
(SELECT * FROM posts WHERE username = 'Matthew' LIMIT 1)
UNION ALL
(SELECT * FROM posts WHERE username = 'Andy' LIMIT 1)
UNION ALL
(SELECT * FROM posts WHERE username = 'Sandra' LIMIT 1)
을 그룹화 할 수 있습니다 사용자 이름에 의한 결과 :
SELECT *
FROM posts
WHERE username IN ('Johnny','Matthew','Andy','Sandra')
GROUP BY username
위의 두 쿼리는 각각에 대해 불확정 한 행을 반환합니다. 사용자 (당신이 필요로하는 것이거나 그렇지 않을 수도 있음). 특정 행을 가져 오려면 MySQL이 원하는 행을 결정하는 방법을 지정하십시오.
UPDATE
는 각 사용자에 대한 가장 최근의 게시물을 획득하고 최신에서 가장 오래된 결과 집합 주문하려면 다음에 명시된 바와 같이
SELECT *
FROM posts NATURAL JOIN (
SELECT username, MAX(date) AS date
FROM posts
WHERE username IN ('Johnny','Matthew','Andy','Sandra')
GROUP BY username
) AS t
GROUP BY username -- only required if multiple posts might have the same date
ORDER BY date DESC
노조를 사용하는 것은 어떻습니까? @eggyal 보정 덕분에 편집
:
(SELECT * FROM posts WHERE username = 'Johnny' LIMIT 1)
UNION
(SELECT * FROM posts WHERE username = 'Matthew' LIMIT 1)
UNION
(SELECT * FROM posts WHERE username = 'Andy' LIMIT 1)
:
(SELECT * FROM posts WHERE username = 'Johnny' ORDER BY date DESC LIMIT 1) UNION ALL (SELECT * FROM posts WHERE username = 'Matthew' ORDER BY date DESC LIMIT 1) UNION ALL (SELECT * FROM posts WHERE username = 'Andy' ORDER BY date DESC LIMIT 1) UNION ALL (SELECT * FROM posts WHERE username = 'Sandra' ORDER BY date DESC LIMIT 1) ORDER BY date DESC
과 [매뉴얼] (http://dev.mysql.com/doc/en/union.html) : "ORDER BY 또는 L을 적용하려면 IMIT'을 개별적인'SELECT'로 옮기고,'SELECT'를 묶는 괄호 안에 절을 넣으십시오. " – eggyal
하지만 모든 결과를 정렬하려면 (다른 모든 SELECT의 결과와 마찬가지로) 어떻게해야합니까? 마지막에 'ORDER BY 날짜 DESC'를 넣어야합니까?) – MatthewSot
죄송합니다. 링크 된 설명서에 다음에 물어볼 때까지 읽어야 할 수도 있습니다 ( – MatthewSot
- 1. MySQL 음수 한계?
- 2. MYSQL 한계 결과
- 3. LaTeX의 한도 기호 오른쪽에 나타나는 한도
- 4. memcache 한도 (MySQL 및 PHP)
- 5. ASP.NET MVC : PathInfo 한도?
- 6. SQLite 데이터베이스의 "선형 한계"
- 7. zedgraphweb의 한계
- 8. 한계 선택
- 9. XUL의 한계
- 10. sharpDevelop의 한계
- 11. phpOCR의 한계
- 12. 한계 크기
- 13. 통합 한계
- 14. Google 지오 코딩 API 한도
- 15. jquery 한도
- 16. 공유 램프의 파일 한도
- 17. 호스팅 제공 업체의 Drupal 실행 메모리 한도
- 18. MYSQL 한도 구문이 프로그래밍 언어의 오버로드 함수와 반대되는 이유는 무엇입니까?
- 19. 방화벽의 한계 극복하기
- 20. 구성의 FPGA 한계?
- 21. 한계 길이는 TTPostController.textView입니까?
- 22. CSS : 한계 - IMG
- 23. 한계 결과 수 javax.jdo.Query
- 24. 한계 스프라이트 회전 - Cocos2d
- 25. Gridsplitter 스트레치 한계 - WPF
- 26. PHP 메모리 한계
- 27. SMT 솔버의 한계
- 28. Levenberg-Marquardt 알고리즘의 한계
- 29. Java 한계 (json 형식)
- 30. 아카이빙 전략과 데이터의 한계
여기에 사용 된 UNION ALL과 아래에 사용 된 UNION의 차이점은 무엇입니까? 또한,'ORDER BY date DESC'와 동등한 작업을 수행하는 방법은 무엇입니까? D : – MatthewSot
@IMAPC : "UNION의 기본 동작은 중복 된 행이 결과에서 제거된다는 것입니다. 옵션 인'DISTINCT' 키워드는 아무 효과가 없습니다 선택 사항 인'ALL' 키워드를 사용하면 중복 행 제거가 발생하지 않고 결과에 모든 SELECT 문에서 일치하는 모든 행이 포함됩니다. 따라서'ALL'을 추가하는 것은 복제본을 스캔하고 제거하기 위해 MySQL을 필요로하지 않는다면 더 효율적입니다. 중복이 불가능하기 때문에 여기서는 마찬가지입니다. – eggyal
@IMAPC : 'DESD 날짜순으로 주문하기'라고 말하면, 각 사용자의 가장 최근 게시물을 임의의 순서로 반환하거나 각 사용자의 게시물을 내림차순으로 반환하기를 원한다는 의미입니까? 또는 둘 다 : 각 사용자의 가장 최근 게시물을 내림차순으로 반환 하시겠습니까? – eggyal