2012-01-07 34 views
0

我已經搜索了類似的問題,但找不到正確的答案給我的具體問題。我在我的表(表)中有一個列(數據),其中包含逗號分隔值,這些值是id的例如PHP,SQL,in_array與csv和while循環只檢索整數

  • 行1 = 4,5,45
  • 行2 = 5,8,9
  • 行3 = 5

我使用in_array函數來檢索出現的次數爲while循環中的$ data值。所以我使用sql函數來檢索while循環中所有行中的特定值(例如'5')發生的次數。

問題是我只能檢索$data值,如果它本身(即沒有逗號只是整數本身),所以根據列表中的示例,我只能檢索5次(第3行)。我想在所有行中出現三次檢索值「5」。這裏是我的代碼如下,任何幫助,將不勝感激。 $ selectiontext變量是用戶從表單輸入的內容。

$sql_frnd_arry_mem1 = mysql_query("SELECT data, id FROM table WHERE data='$selectiontext'"); 

while($row=mysql_fetch_array($sql_frnd_arry_mem1)) { 

$datacheck = $row["data"]; 
$id = $row["id"]; 

} 

$frndArryMem1 = explode(",", $frnd_arry_mem1); 
if (($frnd_arry_mem1 !=="") && (!in_array($id, $frndArryMem1))) {echo $id;} 

謝謝。

+0

'$ frndArryMem1'和'$ frnd_arry_mem1'從哪裏來? – davogotland 2012-01-07 05:10:47

+0

嗨davogotland,$ frndArryMem1是變量函數,$ frnd_arry_mem1是設置爲保存csv數組並將$ id變量插入字段的空變量。所以$ frnd_arry_mem1 =「$ frnd_arry_mem1,$ id」 – Raja 2012-01-07 07:00:01

+0

這已經被回答很多次了,而且#1的回答是,你應該首先正確地對數據進行標準化,然後問題不會發生, t甚至存在 – 2012-01-07 07:23:07

回答

0

你一直覆蓋變量$datacheck$id,只留下他們的最後一個版本。移動是花括號上下兩行,像這樣:

$sql_frnd_arry_mem1 = mysql_query("SELECT data, id FROM table WHERE data='$selectiontext'"); 

while($row=mysql_fetch_array($sql_frnd_arry_mem1)) { 

    $datacheck = $row["data"]; 
    $id = $row["id"]; 


    $frndArryMem1 = explode(",", $frnd_arry_mem1); 
    if (($frnd_arry_mem1 !=="") && (!in_array($id, $frndArryMem1))) {echo $id;} 
} 
+0

嗨davogotland,我試過你的方法,但仍然只接收$ id是由他們自己,而不是在一個數組。或者,我可以通過修改sql語句來使用像SELECT數據,ID從表WHERE數據='$選擇文字'AND $ id像'%newid%''));; $ newid變量是$ newid =£id。',';包含逗號我不確定這是否是最佳做法,但它確實會返回所有發生的事件。 – Raja 2012-01-07 07:00:50

0

我不能完全確定您的要求,是不是很清楚你打算做的代碼的一部分缺少什麼。 我假設你想檢查CSV數據文件($ frnd_arry_mem1是行)中逗號分隔的每一行與列數據中的數據,如果有任何這些逗號分隔的數據(不)發生。 假設你已經通過你的CSV循環,這將是代碼(未測試):

注意:可能是效率低下的循環內檢索數據,如果你可以做別的 - 但我不能告訴我,因爲我不知道您的腳本的完整規格。

如果我的規格錯誤請澄清,我會盡力幫助進一步。

$sql = "SELECT data, id 
     FROM table 
     WHERE data='$selectiontext'"; 
$sql_frnd_arry_mem1 = mysql_query($sql); 
$results = array(); 
// get values to check 
while ($row = mysql_fetch_array($sql_frnd_arry_mem1)) 
{ 
    $results[] = array(
       'datacheck' => $row["data"], 
       'id' => $row["id"], 
       ); 
} 

foreach ($results as $result) 
{ 
    $frndArryMem1 = explode(",", $frnd_arry_mem1); 
    $data = explode(',', $result['datacheck']); 
    foreach ($data as $d) 
    { 
    if (($frnd_arry_mem1 !=="") && (!in_array($d, $frndArryMem1))) 
    { 
     echo 'DEBUG: Record #' . $id . ' not found, value:' . $d . '</br>'; 
    } 
    } 
} 
+0

嗨,Uboonto,我試過你的解決方案,發現它仍然只有檢索單個$ id,而不是csv中的值。csv只是列$ data中的一串id數字。我的目標是提取循環內每行中出現的特定$ id號碼。當然,我只能通過iteslf檢索$ id而不用逗號分隔。我認爲解決方案是隻對錶格進行規範化,因爲值$ id和$ data包含多對多關係。但非常感謝你的幫助 – Raja 2012-01-07 18:39:40