我有以下SQL查询:
SELECT band.id bid, band.name, bandInfo.summary, bandImage.url bandImage,
user.id uid, user.username, userImage.url userImage
FROM bands AS band
INNER JOIN band_info AS bandInfo ON band.id = bandInfo.bid
LEFT JOIN band_image AS bandImage ON band.id = bandImage.bid
LEFT JOIN band_followers AS follower ON follower.bid = band.id
LEFT JOIN users AS user ON user.id IN (SELECT * FROM (SELECT user.id FROM users AS user, bands AS band, band_followers AS follower WHERE user.id = follower.uid) AS temp) AND user.activated = 1
LEFT JOIN user_info AS userInfo ON userInfo.uid = user.id
LEFT JOIN user_image AS userImage ON user.id = userImage.uid
WHERE (band.activated = 1) AND (bandInfo.language = 'fr')
ORDER BY band.name
返回重复行。
目标是检索所有用户是否存在,所有用户都遵循所有带限制来执行某些分页结果。
我必须检索:
{
"table": "Table inconnue",
"rows":
[
{
"bid": 1,
"name": "Children Of Bodom",
"summary": "Children of Bodom est un groupe de metal finlandais. Les cinq membres du groupe sont originaires d'Espoo, une ville finlandaise voisine d'Helsinki. Le groupe ne s’appelle ainsi que depuis 1997, avant quoi il s’appelait Inearthed. La mascotte du groupe est affectueusement appelée Roy et représente l'image folklorique de la mort, la faucheuse. Il est présent sur toutes les couvertures d'albums jusqu'à présent. <a href="http://www.last.fm/music/Children+of+Bodom">Read more about Children of Bodom on Last.fm</a>.",
"bandImage": "http://userserve-ak.last.fm/serve/500/87864171/Children+of+Bodom+band.png",
"uid": 1,
"username": "everytimeicob",
"userImage": "xxxxxxxxx"
},
{
"bid": 1,
"name": "Children Of Bodom",
"summary": "Children of Bodom est un groupe de metal finlandais. Les cinq membres du groupe sont originaires d'Espoo, une ville finlandaise voisine d'Helsinki. Le groupe ne s’appelle ainsi que depuis 1997, avant quoi il s’appelait Inearthed. La mascotte du groupe est affectueusement appelée Roy et représente l'image folklorique de la mort, la faucheuse. Il est présent sur toutes les couvertures d'albums jusqu'à présent. <a href="http://www.last.fm/music/Children+of+Bodom">Read more about Children of Bodom on Last.fm</a>.",
"bandImage": "http://userserve-ak.last.fm/serve/500/87864171/Children+of+Bodom+band.png",
"uid": 2,
"username": "noob",
"userImage": "xxxxxxxx"
},
{
"bid": 2,
"name": "Veil Of Maya",
"summary": "Veil of Maya is a good band",
"bandImage": null,
"uid": 1,
"username": "everytimeicob",
"userImage": "xxxxxx"
}
]
}
但是我找回了:
{
"table": "Table inconnue",
"rows":
[
{
"bid": 1,
"name": "Children Of Bodom",
"summary": "Children of Bodom est un groupe de metal finlandais. Les cinq membres du groupe sont originaires d'Espoo, une ville finlandaise voisine d'Helsinki. Le groupe ne s’appelle ainsi que depuis 1997, avant quoi il s’appelait Inearthed. La mascotte du groupe est affectueusement appelée Roy et représente l'image folklorique de la mort, la faucheuse. Il est présent sur toutes les couvertures d'albums jusqu'à présent. <a href="http://www.last.fm/music/Children+of+Bodom">Read more about Children of Bodom on Last.fm</a>.",
"bandImage": "http://userserve-ak.last.fm/serve/500/87864171/Children+of+Bodom+band.png",
"uid": 1,
"username": "everytimeicob",
"userImage": "xxxxxxxxx"
},
{
"bid": 1,
"name": "Children Of Bodom",
"summary": "Children of Bodom est un groupe de metal finlandais. Les cinq membres du groupe sont originaires d'Espoo, une ville finlandaise voisine d'Helsinki. Le groupe ne s’appelle ainsi que depuis 1997, avant quoi il s’appelait Inearthed. La mascotte du groupe est affectueusement appelée Roy et représente l'image folklorique de la mort, la faucheuse. Il est présent sur toutes les couvertures d'albums jusqu'à présent. <a href="http://www.last.fm/music/Children+of+Bodom">Read more about Children of Bodom on Last.fm</a>.",
"bandImage": "http://userserve-ak.last.fm/serve/500/87864171/Children+of+Bodom+band.png",
"uid": 1,
"username": "everytimeicob",
"userImage": "xxxxxxxxx"
},
{
"bid": 1,
"name": "Children Of Bodom",
"summary": "Children of Bodom est un groupe de metal finlandais. Les cinq membres du groupe sont originaires d'Espoo, une ville finlandaise voisine d'Helsinki. Le groupe ne s’appelle ainsi que depuis 1997, avant quoi il s’appelait Inearthed. La mascotte du groupe est affectueusement appelée Roy et représente l'image folklorique de la mort, la faucheuse. Il est présent sur toutes les couvertures d'albums jusqu'à présent. <a href="http://www.last.fm/music/Children+of+Bodom">Read more about Children of Bodom on Last.fm</a>.",
"bandImage": "http://userserve-ak.last.fm/serve/500/87864171/Children+of+Bodom+band.png",
"uid": 2,
"username": "noob",
"userImage": "xxxxxxxx"
},
{
"bid": 1,
"name": "Children Of Bodom",
"summary": "Children of Bodom est un groupe de metal finlandais. Les cinq membres du groupe sont originaires d'Espoo, une ville finlandaise voisine d'Helsinki. Le groupe ne s’appelle ainsi que depuis 1997, avant quoi il s’appelait Inearthed. La mascotte du groupe est affectueusement appelée Roy et représente l'image folklorique de la mort, la faucheuse. Il est présent sur toutes les couvertures d'albums jusqu'à présent. <a href="http://www.last.fm/music/Children+of+Bodom">Read more about Children of Bodom on Last.fm</a>.",
"bandImage": "http://userserve-ak.last.fm/serve/500/87864171/Children+of+Bodom+band.png",
"uid": 2,
"username": "noob",
"userImage": "xxxxxxxxx"
},
{
"bid": 2,
"name": "Veil Of Maya",
"summary": "Veil of Maya is a good band",
"bandImage": null,
"uid": 1,
"username": "everytimeicob",
"userImage": "xxxxxxxx"
},
{
"bid": 2,
"name": "Veil Of Maya",
"summary": "Veil of Maya is a good band",
"bandImage": null,
"uid": 2,
"username": "noob",
"userImage": "xxxxxxx"
}
]
}
有人在这里有想法吗?我必须限制用户跟随乐队的结果
答案 0 :(得分:1)
尝试下面一次,尝试通过删除不必要的子查询并从中移动条件来修改查询
WHERE
条款JOIN ON
条款
SELECT band.id as bid,
band.name,
bandInfo.summary,
bandImage.url as bandImage,
u.id as uid,
u.username,
userImage.url as userImage
FROM bands AS band
INNER JOIN band_info AS bandInfo ON band.id = bandInfo.bid AND bandInfo.language = 'fr'
LEFT JOIN band_image AS bandImage ON band.id = bandImage.bid
LEFT JOIN band_followers AS follower ON follower.bid = band.id
LEFT JOIN (
SELECT user.id,
user.username
FROM users AS user
WHERE user.activated = 1
LIMIT 10
) u ON u.id = follower.uid
LEFT JOIN user_info AS userInfo ON userInfo.uid = u.id
LEFT JOIN user_image AS userImage ON u.id = userImage.uid
WHERE band.activated = 1
ORDER BY band.name;
答案 1 :(得分:0)
LEFT JOIN band_followers AS follower ON follower.bid = band.id
LEFT JOIN users AS user ON user.id IN (SELECT * FROM
(SELECT user.id FROM users AS user,
bands AS band, band_followers AS follower
WHERE user.id = follower.uid) AS temp) AND user.activated = 1
您加入太多:所有关注者两次,频段无理由加入。
如果您想要&#34;以及&#34;的所有实例,您应该逻辑地从相关表开始:
SELECT * from band_followers
然后加入乐队和用户表:
SELECT
band_followers.uid,
bands.id bid, bands.name,
user.username,
band_info.summary, band_image.url burl,
user_image.url uurl
FROM
band_followers
INNER JOIN bands on band_followers.bid=bands.id
INNER JOIN band_info on band_info.bid=bands.id
INNER JOIN band_image on band_image.bid=bands.id
INNER JOIN users on users.id=band_followers.uid
INNER JOIN user_image on user_image.uid=band_followers.uid
INNER JOIN假设所有字段都是必填字段。 最后,添加条件:
SELECT
band_followers.uid,
bands.id bid, bands.name,
user.username,
band_info.summary, band_image.url burl,
user_image.url uurl
FROM
band_followers
INNER JOIN bands on band_followers.bid=bands.id
INNER JOIN band_info on band_info.bid=bands.id
INNER JOIN band_image on band_image.bid=bands.id
INNER JOIN users on users.id=band_followers.uid
INNER JOIN user_image on user_image.uid=band_followers.uid
WHERE
bands.activated=1
AND users.activated = 1
AND band_info.language = 'fr'