2012-11-28 14 views
1

我有以下代碼,但我有一個問題。如何顯示數據,當一個單元格包含更多多值分隔符逗號

$query = "SELECT p.*,(TO_DAYS(p.start_date) - TO_DAYS(NOW())) AS daydiff FROM #__jblance_project p ". 
       "WHERE p.status=".$db->quote('COM_JBLANCE_OPEN')." AND p.approved=1 AND '$now' > p.start_date AND p.id_category=202 ". 
       "ORDER BY p.is_featured DESC, p.id DESC ". 

的問題是,當現場id_category具有比等

202,203,204 

它沒有顯示althout我有任何結果只有一個值愈變碼到

AND p.id_category=202 OR .id_category=203 OR .id_category=204 

作爲單元格包含逗號分隔的所有值

任何建議。

感謝 D.

+0

格式的代碼,請 –

+0

對不起IA是新來這個網站是什麼ü意味着 – user1859876

+0

多數民衆贊成確定。保存你自己從nt得到downvote –

回答

0
$query = "SELECT p.*,(TO_DAYS(p.start_date) - TO_DAYS(NOW())) AS daydiff FROM #__jblance_project as p ". "WHERE p.status=".$db->quote('COM_JBLANCE_OPEN')." AND p.approved=1 AND '$now' > p.start_date AND p.id_category=202 ". "ORDER BY p.is_featured DESC, p.id DESC ". 

從#__jblance_project添加爲p

+0

嗨我已經編輯與p代碼。但我仍然看不到任何結果。我只看到結果,當t細胞有一個值,例如202,但不是當一個單元格有兩個值時202,203 – user1859876

0

擴大對我的評論,可以考慮改變這個:

SELECT p.*,(TO_DAYS(p.start_date) - TO_DAYS(NOW())) AS daydiff 
FROM #__jblance_project p 
WHERE p.status=<something> 
AND p.approved=1 AND '$now' > p.start_date 
AND p.id_category=202 
ORDER BY p.is_featured DESC, p.id DESC 

喜歡的東西:

SELECT p.*,(TO_DAYS(p.start_date) - TO_DAYS(NOW())) AS daydiff 
FROM #__jblance_project p 
WHERE p.status=<something> 
AND p.approved=1 AND '$now' > p.start_date 
AND 0 < FIND_IN_SET(202, p.id_category) 
ORDER BY p.is_featured DESC, p.id DESC 

而且,我可能會寫完整的PHP語句:

$query = sprintf('SELECT p.*,(TO_DAYS(p.start_date) - TO_DAYS(NOW())) AS daydiff 
    FROM #__jblance_project p 
    WHERE p.status=%s 
    AND p.approved=1 AND '%s' > p.start_date 
    AND 0 < FIND_IN_SET(202, p.id_category) 
    ORDER BY p.is_featured DESC, p.id DESC', $db->quote('COM_JBLANCE_OPEN'), $now); 

注意,這更是一個解決方法比「正確」的解決方案。您應該考慮重新格式化數據庫,以便每個字段有一個條目,而不是逗號分隔列表。

第二個使用FIND_IN_SET字符串函數應該笨拙地完成您的目標。

This related question特別是答案和評論可能是有益的。

+0

感謝jedwards這對我工作 – user1859876

0

沒有做到這一點...真正堅實的路你不得不擁有像一些醜陋:

id_category LIKE "%,123" OR 
id_category LIKE "123,%" OR 
id_category LIKE "%,123,%" OR 
id_category = "123" 

的原因,這是如此的醜陋,是因爲這是一個壞主意,使用像分隔的字段這個。相反,你應該創建一個單獨的表有兩列:

  • 的項目
  • ID的ID爲類別

這是一個多一對多的關係。

如果你想與你砍走的更遠,我建議不要格式化id_category這樣的:

123,456,789 

但是相反:

,123,456,789, 

前後於是包括一個逗號。至少,您可以簡化像查詢:

id_category LIKE "%,123,%" 

編輯:我不知道FIND_IN_SET。這聽起來像是一個有效的解決方案,雖然規範化你的數據仍然會給你一個更好的結果。

0

你必須在MySQL中使用IN()的關鍵字。

p.id_category IN (202,203,204) 

在這裏,您可以像這樣傳遞動態類別ID數組。

$array_cat_id = impload(',' ,$pass_array_of_the_id); 

p.id_category IN ($array_cat_id) 
相關問題