PHP,SQL,in_array与csv和while循环只检索整数

时间:2012-01-07 04:57:25

标签: php sql csv

我搜索过类似的问题,但找不到我特定问题的正确答案。我的表(表)中有一个列(数据),其中包含逗号分隔的值,这些值是id,例如

  • 第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;}

谢谢。

2 个答案:

答案 0 :(得分: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;}
}

答案 1 :(得分: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>';
     }
   }
}