2013-07-16 3 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

Может кто-нибудь, дайте мне знать, где я неправильно? Благодаря!

EDIT: Записи следует показывать: -

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` 

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

@Prix Теперь я обновил свой ответ –

+0

, почему не у вас простая группа, а вместо того, чтобы делать новый выбор? Просто любопытно. – Prix

Смежные вопросы