我的服务器数据库花了太长时间才能通过单独的线程运行两个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'))
答案 0 :(得分:0)
你只需要使用通配符。你的一些喜欢似乎是多余的,因为你已经在正面和背面与%匹配。
$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'
)";
答案 1 :(得分:0)
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' )
答案 2 :(得分:0)
如果您需要确保只有第一行用于您要在SQL中复制的用户,您需要加入内联查询
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'