2017-02-01 1 views
1

私が書いたコードは、テーブルからプロファイルIDを取得することですが、私は珍しいコードを取得したいのですが、array_diffまたはarray_diff_assocアウトそれは値だけでなく、キーをチェックするために、同じキーの一部を持っているので、もしあなたが、、、PHPでこれをやろうとしている。このためarray_diff_assocを使用しない場合は、[]Array_diff()は、同じテーブルから2つの配列フェッチの正しい出力を生成しません

require_once __DIR__ .'/connect.php'; 
$db = new DB_CONNECT(); 


$result = mysql_query("select PROFILE_ID from chat_group_members where GROUP_ID =4"); 
$reg = mysql_query("select PROFILE_ID from chat_group_members where GROUP_ID = 5"); 

$reg1 = mysql_fetch_assoc($result);//result is profile_id 9 
$result1 = mysql_fetch_assoc($reg);//result is profile_id 9 and Profile id 11 

$result2=array_diff_assoc($result1,$reg1); 
echo json_encode ($result2); 
//output is blank [] 
+4

**警告**:PHPを学んでいるだけの方は、古い[mysql_query'](http://php.net/manual/en/function.mysql-query.php)を学ばないでください。インタフェース。それはひどいので、PHP 7では削除されました。[PDOは学ぶのが難しくありません](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo- for database-access /)、[PHP The Right Way](http://www.phptherightway.com/)のようなガイドはベストプラクティスの説明に役立ちます。 **あなたのユーザーパラメータが[正しくエスケープされている](http://bobby-tables.com/php)か、重大な[SQLインジェクションバグ](http://bobby-tables.com/ )。 – tadman

答えて

1

まずあり2番目の配列では、異なる順序で、それらは一致しません。ただ普通のarray_diffがうまくいくでしょう。 (サポートされているインターフェイスにアップグレードする場合はmysqli_fetch_assocmysql_fetch_assocは、あなただけの結果から1行を取得しているため

第二に、他のコードがありますしない限り、あなたは$result1ないを行い、示されていないが、9および11を含んでいます。

この比較を行うには、結果をすべて取得する必要があります。

しかし、PHPではこれを行う必要はありません。代わりに1つのクエリで実行できます。それを行うにはいくつかの方法があります。 1つの方法はサブクエリでNOT INを使用することです。

SELECT PROFILE_ID FROM chat_group_members 
WHERE GROUP_ID = 5 
AND PROFILE_ID NOT IN (SELECT PROFILE_ID FROM chat_group_members WHERE GROUP_ID = 4) 

ただし、すべての結果を取得する必要があります。これはしばしばループwhileを使って行われます。 You can see some examples in the mysqli documentation here

+0

提案バディありがとう。私は実際には、すべての配列要素を取得するためにループを実行する必要があることを忘れて、望ましい出力を得ました。 –

関連する問題