2016-05-09 62 views
0

在我的數據庫中,我有一個表,其中一個字段爲Subject的表。 它會持有這樣的價值。例如。 1,2,3,4在數組中使用mysql選擇行

現在, 我需要這個領域與我的陣列名爲

$mysubs=array('1','3','5'); 

我曾經嘗試這樣做比較。

select * from Timetable where Subject IN (".implode(',',$mysubs)."); 

但是,如果我在主題字段中只有一個值,它正在工作。如果它拿着1,2,3,那麼它不起作用。是否可以使用'LIKE'進行匹配。 PLZ幫我

回答

0

嘗試一些東西像這樣如果subject字段值是用逗號分隔的。

$mysubs = array('1','3','5'); 
$whereSubClause = ''; 
for($i=0; $i < count($mysubs); $i++){ 
    $whereSubClause .= 'FIND_IN_SET($i,subject) OR '; 
} 
// Remove the last OR 
$whereSubClasue = substr($whereSubClause,0,-3); 
// now query 
select * from Timetable where $whereSubClause; 

但如果它不是逗號分隔這樣做:

$values = implode("','",$mysubs); 
"select * from Timetable where subject IN('".$values."');" 
+0

而不是使用的,您需要使用或否則會無法正常工作,因爲它跳過有一些比賽 SELECT * FROM時間表的記錄,其中FIND_IN_SET(「1」,'Subject') OR FIND_IN_SET('3','Subject')或FIND_IN_SET('5','Subject') –

+0

@HardevSharma是的,你是對的。 –

+0

是的。這對我有用..謝謝你先生.. – athi

0

嘗試此查詢

$sql = "select * from Timetable where Subject LIKE '".implode(',',$mysubs)."%'"; 

它可以幫助你。

0
$values = implode(',',$mysubs); 
$query = "select * from Timetable where Subject IN ($values)"; 

我用在我的一些項目,而且運作良好

我也認爲最好是單獨的查詢和PHP操作,至少在一個更好的代碼可讀性

0

這應該工作:

$mysubs = array(1, 3, 5); 
$sql = "SELECT * FROM Timetable WHERE Subject IN (".implode(', ', $mysubs).");"; 

應該輸出這樣的:

$sql = "SELECT * FROM Timetable WHERE Subject IN (1, 3, 5);"; 

據一般來說,SQL中的一些很好的做法是大寫部分像SELECT,INSERT或UPDATE這樣的語言。您在$ mysubs中搜索的值的數組也是字符串,但將它們作爲整數更好。

0

您需要保存該字段,並附加逗號和前綴。

例如:

,1,2,3,4, OR ,11,12,23,45,

而且你需要搜索每個數組元素。

$mysubs=array('1','3','5'); 

select * from Timetable where Subject LIKE '%,1,%' OR 
Subject LIKE '%,3,%' Subject LIKE '%,5,%' 
+0

它正在工作,如果我的數組是按順序。手段。如果主題字段保持這樣的值1,2,4,3。,那麼如果我的allsub數組是$ allsub =(1,2,4)或(2,4)或(4,3)或(1,2, 4)爲了工作正常,請使用這個。否則,如果我的allsub數組是1,3,4,它不會選擇確切的行 – athi