2013-07-16 37 views
0

我遇到了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) 
+0

编辑:添加记录它应该显示 – user2547576

+1

你需要这么多的查询吗?不会有人这样做吗? – Strawberry

+0

性能不是问题,我是一个新手,所以我更容易将它分解为单独的查询。更不用说他们在“评级”列中搜索不同的东西,然后用不同的前缀回显出来。 – user2547576

回答

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` 

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` 
+0

@Prix现在我已经更新了我的答案 –

+0

为什么不要简单地将它分组,而不是做出新的选择?只是好奇。 – Prix