2012-01-07 13 views
0

私は同様の質問を検索しましたが、私の具体的な答えを見つけることができません。私のテーブル(テーブル)には、カンマで区切られた値(IDなど)を含む列(データ)があります。PHP、SQL、in_array、csv、whileループのみ整数を取得中

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

方にはoccurancesの数を取得するin_array関数を使用whileループ内の$ data値。したがって、SQL関数を使用して、 '5'などの特定の値がwhileループ内のすべての行で発生する回数を取得します。

$dataの値を取得できるのは、自分自身の場合(つまり、整数だけのコンマは使用しないため)、リストの例に基づいて5回(行3)を取得できるということです。すべての行に表示される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

+0

こんにちはdavogotland、変数$ frndArryMem1はexpoded関数です。$ frnd_arry_mem1は空の変数で、csvの配列を保持し、$ id変数をフィールドに挿入します。だから$ frnd_arry_mem1 = "$ frnd_arry_mem1、$ id" – Raja

+0

これは今何度も答えられています...そして第1位の答えは、まずデータを正常に正規化しておかなければならないということです。 tも存在する –

答えて

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を受信して​​います。代わりに、配列から$ idを取得するには、sqlステートメントをSELECTデータ、ID FROMテーブルWHERE data = '$ selectiontext'、 '$ newid%'のような$ idのようなものを使用するように変更する;); $ newid変数は$ newid =£id。 '、';カンマを含めるにはこれがベストプラクティスであるかどうかはわかりませんが、すべての出現を返しています – Raja

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、私はあなたの解決策を試しました。 csv内の値ではなく、個々の$ idを取得します。csvは、$ data列内のID番号の文字列です。私の目標は、ループ内の各行で発生する特定の$ id番号を抽出することです。 Currntly私はカンマ区切りなしでiteslfである$ idだけを取得できます。私は、解決策は、値$ idと$ dataが多対多の関係で構成されているので、テーブルを正規化することだと思います。しかし、助けてくれてありがとう – Raja

関連する問題