Database MySQL查询:tag.names和lang的列表,它不是';t已在图像\u URL的组合中插入
我想不出任何好办法来获得tag.names和lang的列表,它们还没有插入到images\uURL的组合中 我的数据库看起来像这样 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 | +--------+------+ 我建议图片URL应该包含用户id而不是名称,但这是另一个问题 列不在('name`、'name1'、'name2'、'name3')Database MySQL查询:tag.names和lang的列表,它不是';t已在图像\u URL的组合中插入,database,mysql,Database,Mysql,我想不出任何好办法来获得tag.names和lang的列表,它们还没有插入到images\uURL的组合中 我的数据库看起来像这样 tags name user_id +-------+---------+ |hi | 1 | |friend | 1 | |friend | 2 | |people | 2 | +-------+---------+ users id lang +---+------+ | 1 |
也适用于测试目的。我不确定为什么
图像\u URL
有一个名称而不是用户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
使用
LEFT JOIN
返回NULL
用于images\u url
中不存在的行,因此我对此进行了检查。我怀疑这是否会返回正确的结果。在本例中,它不会返回friend en
,因为有一个带有friend
(但不是正确的)的image\u url
。这似乎有效。图像\u URL具有名称,因为图像表示标记而不是用户。
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;
SELECT tags.name, users.lang
FROM tags, users
WHERE tags.user_id = users.id
AND users.name NOT IN (SELECT name from images_urls);
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