2010-02-23 3 views
2

안녕하세요. 이미 tags.names 및 lang 목록을 가져 오는 좋은 방법을 알아낼 수 없습니다. 이미 images_urls 안에 조합으로 삽입되어 있지 않습니다.MySQL 쿼리 도움말

내 데이터베이스는 다음과 유사합니다. 내가 좋아하는 것이 무엇

 
tags 

    name user_id 
+-------+---------+ 
|hi  | 1 | 
|friend | 1 | 
|friend | 2 | 
|people | 2 | 
+-------+---------+ 

users 

id lang 
+---+------+ 
| 1 | en | 
| 2 | sv | 
+---+------+ 

images_urls 

    name  lang 
+--------+------+ 
| hi  | en | 
| friend | sv | 
+--------+------+ 

는 것이다 돌아왔다합니다 :이 같은 것을 시도

 
result 

name  lang 
+-------+------+ 
|friend | en | 
|people | sv | 
+-------+------+ 

:

SELECT tags.name, users.lang 
FROM tags, users 
WHERE tags.user_id = users.id 
AND CONCAT(tags.name, ',', users.lang) NOT IN(
    SELECT DISTINCT CONCAT(name, ',', lang) FROM images_urls 
) 
GROUP BY CONCAT(name, ',', lang) 
ORDER BY SUM(tags.count) DESC 
LIMIT 20; 

감사합니다.

답변

2

나는 images_urls 대신 user_id의 이름이 왜 확실하지 않다, 그러나 이것은 작동합니다 :

SELECT t.name, u.lang 
FROM tags t 
JOIN users u ON (u.id = t.user_id) 
LEFT JOIN images_urls iu ON (iu.name=t.name AND iu.lang=u.lang) 
WHERE iu.name IS NULL 

images_urls에 존재하지 않는 행의 LEFT JOIN 반환 NULL을 사용하여, 그래서 나는 그 확인 .

+0

이것은 작동하는 것 같습니다. images_urls는 이미지가 태그가 아닌 사용자를 나타내는 이름이기 때문에 이름이 있습니다. –

1

images_urls에 이름이 아닌 user_id가 있어야하지만 다른 문제가 있다고 제안합니다.

열 NOT IN ('name` ","NAME1 ","NAME2', 'NAME3')

또한 테스트 용 유효하다.

+0

올바른 결과가 반환 될지 의심 스럽습니다. 이 예제에서는'friend en'을 반환하지 않을 것입니다. 왜냐하면'friend'가있는 image_url이 있기 때문입니다 (그러나 올바른 것은 아닙니다). –

+0

아 맞아. 그것은 미친 디자인입니다. – MindStalker