2017-03-26 6 views
0

우선, 다음은 사용하려는 쿼리입니다.MySQL이 예상대로 작동하지 않습니다.

SELECT * FROM Messages t WHERE perspective_user=? and timestamp BETWEEN ? AND ? AND 
timestamp_added = 
(select max(timestamp_added) from Messages t2 
where 
t2.author = t.author AND 
t2.body = t.body AND 
t2.timestamp = t.timestamp AND 
t2.timestamp_added <= ? 
) AND convo_id IN (SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?); 

코드는 다음 행없이 정상적으로 작동하지만 결과는 0입니다.

AND convo_id IN (SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?); 

나는 위의 행이 기본 SELECT * 쿼리에서 테스트되었음을 ​​확인했습니다. 데이터베이스에 최상위 쿼리를 충족시키는 행이 있는지도 확인했습니다.

데이터는 Skype 메시지의 로그입니다. 로그는 무작위로 추출됩니다. 목표는 여전히 데이터베이스에있는 최신 로그를 얻는 것입니다. 목표는 내 Skype 메시지를 그래프로 나타내고 다른 재미있는 일을 할 수있게하는 것입니다. Skype는 이전 컴퓨터의 데이터베이스에서 데이터베이스를 지 웁니다. 긴 "timestamp_added"문은 각 메시지의 최신 항목을 가져 오는 것이므로 최신 로그에 제거 된 데이터베이스가있는 경우 이전 메시지가 계속 포함됩니다.

+1

일부 샘플 데이터와 같은 GROUP_CONCAT()를 사용? –

+0

샘플 데이터와 바인딩 매개 변수 및 예상 출력을 제공해야합니다. – ysth

+0

t2 subselect를 사용하는 이유를 설명 할 수 있습니까? – ysth

답변

-1

첫 번째 것은 IN과 괄호 사이에 공백이 있다는 것입니다. MySQL은 "싫어"합니다.

...AND convo_id IN(SELECT... 

을하지만 그냥 주제 게시 오타 오류가 있다면, 당신의 데이터 (MessagesConversations의 MySQL의 방식)를 공유하십시오 : 그런 식으로 수정.

+0

이것은 매우 문제가 될 수 있습니다. 왜 그런가요? – Stephen

+0

테스트를 받았습니까? 왜 그런지 모르겠지만 연습 전에이 문제에 자주 직면했습니다. IN이 받아 들여지면 [공식 MySQL 문서] (https://dev.mysql.com/doc/refman/5.7/en/any-in-some-subqueries.html)와 비슷한 모양입니다. – deeplay

+0

아, skype db 파일입니다. 저는 MySQL이 아니라고 생각합니다. Skype는 SQLite를 사용합니다. 그리고 SQLite "IN"이 MySQL "IN"과 동일하게 작동하는지 확신 할 수 없습니다. – deeplay

-1

아래 문은 IN() 함수에 전달해야하는 항목이 CSV이므로 행 목록을 반환합니다.

(SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?) 

그래서 그 대신이

(SELECT GROUP_CONCAT(convo_id) FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=? GROUP BY convo_id) 
+0

음, 아니. IN에 의해 ​​사용되는 subselect는 쉼표로 분리 된 문자열이 아닌 각각에 하나의 값을 가진 행을 리턴해야합니다. – ysth

+0

@ysth : 당신 말이 맞아요. 나는 오해의 IN()에 대한 문서를 보았습니다. http://www.w3resource.com/mysql/comparision-functions-and-operators/in-function.php – blokeish