2017-01-27 12 views
0

私はいくつかの値を見つけてそれらを配列に入れるテーブルをmysqlに持っています。Foreachを使用して単一の結果を得るPHP

は、配列の値が1と5

今、私は私が5のIDを持っている別のテーブルにクエリに対して、この配列を使用していると私はそれは私にすべてのIDを引いたものを示していることを希望したとアレイの(SOのみ2,3,4)

これは私がクエリでのforeachを渡すために使用するコード

foreach ($array as $value) { 
    $arr=array(); 

    $query= "SELECT * FROM test WHERE data NOT LIKE '%$value%'"; 
    $result=mysqli_query($con,$query); 

    while($row = mysqli_fetch_array($result)) { 
     echo $row["id"]; 
    } 
} 

Iを得たい結果が「2,3であり、 4 "しかしそれは私に与える2,3,4,5,1,2,3,4

これは配列の作成です

$array= array(); 
$query= "SELECT * FROM test WHERE time1>= '$startTime' AND time1 <= '$endTime'"; 
$result=mysqli_query($con,$query); 
while($row = mysqli_fetch_array($result)) { 
$array[]=$row["data"]; 
} 

どうやってできますか?

+0

、それはあなたが本当に欲しいものですか? –

+0

あなたの質問はあなたのテーブルの構造に関して本当に明確ではありません。 'id'と' data'カラムはどのような型ですか?配列の各値に対してSQLクエリを実際に実行するかどうかは疑問です。 – cars10m

答えて

4

なぜより良いSQLクエリを作成しますか?

$query= "SELECT * FROM test WHERE data NOT IN (".implode(',',$array).")"; 

または翻訳:あなたはあなたのクエリのようにしていない

SELECT * FROM test WHERE data NOT IN (1,5) 
+0

こんにちは私はしようとしましたが、それは動作しません...おそらく、配列を作成するために私のコードは良くありません?私は今質問に投稿しました – piccolopasticcio

+0

'データ'はINT型ではないようです。私はあなたがここで何をしたいのか分からないと思う。実際の例と実際に期待される出力を与えます。 –

1

$query= "SELECT * FROM test WHERE data NOT LIKE '%$value%' AND id NOT IN ({implode(',',$array_of_ids_you_dont_want)})";に変更しますか?

編集:私はあなたの最初の配列への「ID」キーを追加し、「データ」フィールドに「データ」キーを移動した

$array= array(); 
$query= "SELECT * FROM test WHERE time1>= '$startTime' AND time1 <= '$endTime'"; 
$result=mysqli_query($con,$query); 
while($row = mysqli_fetch_array($result)) { 
    $array[]= array(
     'id'=>$row['id'], 
     'data'=>$row["data"] 
    ); 
} 

idを使用できるようにすると、array_map関数を使用してすべてのIDの新しい配列を取得できます。次に、この配列を使用してwhere条件を構築できます。 foreachの前にそれを使うのは賢明です。なぜなら、繰り返しごとに同じであるからです。最後に、$ arrayにはサブ配列が含まれています。要素をforekingすると、上記のidとdataキーを持つ配列になります。

$exclude_ids = array_map(function($el){return $el['id'];},$array); 
$exclude_ids_query = "id NOT IN ({implode(',',$exclude_ids)})"; 

foreach ($array as $element) { 
    $arr=array(); 
    $query= "SELECT * FROM test WHERE data NOT LIKE '%{$element['data']}%'".$exclude_ids_query; 
    $result=mysqli_query($con,$query); 

    while($row = mysqli_fetch_array($result)) { 
     echo $row["id"]; 
    } 
} 
+0

こんにちは私は試してみましたが動作しません...おそらく配列を作成するコードが良くないのでしょうか?今質問に投稿しました – piccolopasticcio

+0

OK私はそれを得たと思います。 –

+0

警告:array_map()は少なくとも2つのパラメータを必要とし、1は – piccolopasticcio

関連する問題