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