查询未返回所有可能的结果

时间:2013-07-16 15:13:20

标签: php mysql

我遇到的问题是MySQL LIKE没有返回所有可能的结果。我有以下代码:

<?php
$query  = "SELECT `user_id`,
                  `rank`, 
                  `habbo_name`,
                  `rating`,
                  `branch` 
             FROM `personnel` 
            WHERE status='active' AND
                  rating='(DIROPS)' 
         ORDER BY `habbo_name`";

$result = $con->prepare($query);
$result->execute();
while ($row = $result->fetch())
{
    echo "<b>DIROPS:</b>&nbsp" . htmlspecialchars($row['habbo_name']) . "<br>";
}

$query  = "SELECT `user_id`, 
                  `rank`, 
                  `habbo_name`, 
                  `rating`, 
                  `branch` 
             FROM `personnel` 
            WHERE status='active' AND 
                  rating='(CO TECOM)' AND 
                  `branch`='usmc' 
         ORDER BY `habbo_name`";

$result = $con->prepare($query);
$result->execute();
while ($row = $result->fetch())
{
    echo "<b>CO TECOM:</b>&nbsp" . htmlspecialchars($row['habbo_name']) . "<br>";
}

$query  = "SELECT `user_id`, 
                  `rank`, 
                  `habbo_name`, 
                  `rating`, 
                  `branch` 
             FROM `personnel` 
            WHERE status='active' AND 
                  rating='(XO TECOM)' AND 
                  `branch`='usmc' 
         ORDER BY `habbo_name`";

$result = $con->prepare($query);
$result->execute();
while ($row = $result->fetch())
{
    echo "<b>XO TECOM:</b>&nbsp" . htmlspecialchars($row['habbo_name']) . "<br>";
}
?>
<br>
<?php
$query  = "SELECT `user_id`, 
                  `rank`, 
                  `habbo_name`, 
                  `rating`, 
                  `branch` 
             FROM `personnel` 
            WHERE status='active' AND 
                  `rating` LIKE '%(TECOM%'  OR 
                  `rating` LIKE '%/TECOM%'  AND 
                  status='active' 
         ORDER BY `habbo_name`";

$result = $con->prepare($query);
$result->execute();
while ($row = $result->fetch())
{
    echo "<b>TECOM:</b>&nbsp" . htmlspecialchars($row['habbo_name']) . "<br>";
}
?>

据我所知,这应该打印出评级为(DIROPS),(CO TECOM),(XO TECOM)然后(TECOM或/ TECOM)的人。

我遇到的问题是只有DIROPS和其他几个人被退回。这是我从该代码得到的结果:

enter image description here

有谁能让我知道我哪里出错了?谢谢!

编辑:应该显示的记录: -

TEO-emo12 (DIROPS)
RockerManiac123 (CO TECOM) 
Rach-L (Lugn)  (XO TECOM)
Reyess  (TECOM)
zachary1142 (AuXHiDef-) (TECOM) 
norsk.no (TECOM)
lordoftjefly (mingrana) (PPO/TECOM)
spen1000 (TECOM/DI)

1 个答案:

答案 0 :(得分:0)

您应该使用一个查询而不是为每个条件多次运行相同的查询,将所有rating条件包含在具有父AND运算符的组中,然后循环遍历结果集忽略多个循环会影响执行时间

SELECT `user_id`, 
                  `rank`, 
                  `habbo_name`, 
                  `rating`, 
                  `branch` 
             FROM `personnel` 
            WHERE status='active' AND (
                  `rating` LIKE '%(DIROPS)%' OR 
                  `rating` LIKE '%(CO TECOM)%' OR                      
                  `rating` LIKE '%(XO TECOM)%'   OR
                  `rating` LIKE '%(TECOM%'  OR 
                  `rating` LIKE '%/TECOM%' 
                 ) AND  `branch`='usmc' 
         ORDER BY `habbo_name`

OR

 SELECT `user_id`, 
                  `rank`, 
                  `habbo_name`, 
                  `rating`, 
                  `branch` 
             FROM `personnel` 
            WHERE status='active' AND (
                  `rating` LIKE '%(DIROPS)%' OR 
                  `rating` LIKE '%(TECOM%'  OR 
                  `rating` LIKE '%/TECOM%' 
                 ) OR `rating`   IN
 (SELECT `rating` FROM `personnel` WHERE `branch`='usmc' 
  AND ( `rating` ='(CO TECOM)' OR `rating` ='(XO TECOM)'))   
         ORDER BY `habbo_name`
相关问题