[英]One SQL query instead of three sql queries
我的服务器数据库花了太长时间,无法通过单独的线程运行两个sql查询。 我在PHP中这样做:
$First=mysql_query("SELECT `ID`,`Country` FROM `Users` WHERE `IP`='".$ip."'",$connection);
$row=mysql_fetch_assoc($First);
$id=$row['ID'];
$ucountry=$row['Country'];
$opt=mysql_query("SELECT Size,Paper,Zip FROM Tools WHERE (Users LIKE '%".$id."%') OR (Users LIKE '".$id."%') OR (Users LIKE '%".$id."') OR (Users LIKE '".$id."') OR (Users LIKE 'All users') OR (Country LIKE '".$ucountry."') OR (Country LIKE 'All countries')",$connection);
在一个查询中如何在mysql中完成所有这些工作?
我尝试了这个:
SELECT (SELECT `ID` FROM `Users` WHERE `IP`='xx.xx.xx.xx' ) AS UID, (SELECT `Country` FROM `Users` WHERE `IP`='xx.xx.xx.xx' ) AS UCountry, (SELECT Size,Paper,Zip FROM Tools WHERE (Users LIKE CONCAT('%#',UID,'#%')) OR (Users LIKE CONCAT('#',UID,'#%')) OR (Users LIKE CONCAT('%#',UID,'#')) OR (Users LIKE CONCAT('#',UID,'#')) OR (Users LIKE 'All users') OR (Country LIKE UCountry) OR (Country LIKE 'All countries'))
您只需要使用通配符即可。 您的某些LIKE似乎是多余的,因为您已经在正面和背面将%与之匹配。
$query = "SELECT Users.ID
,Users.Country
,Tools.Users
,Tools.Country
,Tools.Size
,Tools.Paper
,Tools.Zip
FROM Tools
INNER JOIN Users
ON Users.IP = '$ip'
AND (
Tools.Users LIKE CONCAT('%', Users.ID, '%')
OR Tools.Users = 'All users'
OR Tools.Country LIKE Users.Country
OR Tools.Country = 'All countries'
)";
SELECT t.Size, t.Paper, t.Zip
FROM Tools AS t
INNER JOIN Users AS u
ON (Users LIKE CONCAT('%', u.ID, '%'))
OR (Users LIKE CONCAT(u.ID, '%'))
OR (Users LIKE CONCAT('%', u.ID))
OR (Users LIKE u.ID)
OR (Users LIKE 'All users')
OR (Country LIKE u.Country)
OR (Country LIKE 'All countries')
WHERE ( u.IP = '$ip' )
您的某些LIKE标准是多余的,因为由于先前的标准,它们一定是正确的。
因此,上一个查询等效于:
SELECT t.Size, t.Paper, t.Zip
FROM Tools AS t
INNER JOIN Users AS u
ON (Users LIKE CONCAT('%', u.ID, '%'))
OR (Users LIKE 'All users')
OR (Country LIKE u.Country)
OR (Country LIKE 'All countries')
WHERE ( u.IP = '$ip' )
如果需要确保从用户中选择的第一行仅用于复制到SQL中,则需要JOIN到内联查询
SELECT t.SIZE,
t.paper,
t.zip
FROM tools t
INNER JOIN (SELECT `id`,
`country`
FROM `users`
WHERE `ip` = ?
LIMIT 1) u
ON t.Users like CONCAT('%',u.id '%')
OR t.user LIKE 'All users'
OR Country LIKE CONCAT('%',u.country '%')
OR Country LIKE 'All countries'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.