3

これは私の質問です:

SELECT DISTINCT ap.apptype_id
FROM tblSubmission AS s
JOIN tblApp AS ap ON ap.app_id = s.app_id
WHERE s.app_id =406
OR s.app_id =180
OR s.app_id =179

データベース内の行に関連する一意のapptype_idのみを返します。単一次元配列ではなく多次元配列を返すという事実を除いて、現在は正常に機能します。先に進んでこれを解決するPHP関数を作成することもできますが、サーバーにクエリの問題を修正するための追加の作業を行わせるのではなく、クエリで配列を適切に返すようにします。誰かが私を助けることができますか?

また、このクエリを最適化してさらに高速化する方法を誰かが見つけた場合は、それも素晴らしいことです。

function db_query($querystring) { 
   $rec_set = array(); 
   $result = mysql_query($querystring); 
   if (!$result) { 
       // do nothing, query might have failed but it might have just returned no results          
       #echo ("Invalid Query Result:<br /><b>" . $querystring . "</b><br />"); // debug 
    }elseif($result === true){ 
       // do nothing, query didn't return anything but succeeded 
    }else{ 
       while ($row = mysql_fetch_assoc($result)) { $rec_set[] = $row; }            
       mysql_free_result($result); 
    } 
    return $rec_set; 
  }
4

3 に答える 3

1

2 つのレコードを返すので、多次元です。

あなたが持っていてDISTINCT ap.apptype_id、あなたのクエリは異なるIDを持つ2つのレコードを見つけます.

編集:明確にするために。あなたが探しているように、一次元配列であなたが意図した結果は次のとおりだと思います:

array([7], [2]) // i.e your two distinct ids.

mysql では列ヘッダーも返されるため、このレイアウトは意味をなさないことに注意してください。

編集2:

たぶん、このようなものが役立つでしょうか?

$a = array(
    0 => array('first'=>7),
    1 => array('second'=>2)
);

$row = array_map('implode', $a);

出力:

array(2) { [0]=> string(1) "7" [1]=> string(1) "2" }

array_map は、ここで必要な関数です。必要に応じて機能するはずです。

于 2012-10-16T16:11:17.847 に答える
0

あなたがそれを求めているので、それは多次元配列を返しています mysql_fetch_assoc($result)

コードを PDO などに移動すると、fetch column を使用して必要なものを取得できます。 http://www.php.net/manual/en/pdostatement.fetchcolumn.php

元の質問に関しては、クエリは問題ありません。PHP から取得する方法が問題の原因です。IN高速化に関しては、複数ではなく使用を検討するかもしれませんがORs、それがmysqlとの違いを生むかどうかはわかりません(クエリでEXPLAINを使用して、DBが結果を取得するために使用しているものを表示できます)

于 2012-10-16T17:49:10.707 に答える
0
SELECT DISTINCT ap.apptype_id
FROM tblSubmission AS s
JOIN tblApp AS ap ON ap.app_id = s.app_id

上記の部分は、 inとの両方でapptype_idあるすべての個別のものを選択します。そして、IDがいずれかの場合に取っています。したがって、対応するがこれら 3 つの と一致し、両方のテーブルにあるものをすべて返します。app_idtblSubmissiontblApp406 OR 180 OR 179apptype_idIDID

仮定する、

tblApp(id, type)と の 3 つのエントリ<406, 10><180, 11>あり<100, 12>ます。 tblSubmission(id, ...)と の 3 つのエントリ<406, ...><180, ...>あり<179, ...>ます。参加後table(id, type, ...)は 2 つのエントリが <406, 10, ...>あり、<180, 11, ...> 個別のタイプを選択するとどうなるか考えてみてください。2 つのエントリを返し <10><11>

于 2012-10-16T16:05:28.790 に答える