1

これはMySQLでの私の実際のクエリです:

 SELECT sndprefix, COUNT(*) FROM `inbox` WHERE
 (
 sndprefix='22' OR 
 sndprefix='23' OR 
 sndprefix='32' OR 
 sndprefix='33' OR 
 sndprefix='34' OR 
 sndprefix='42' OR 
 sndprefix='43'
 ) 
 GROUP BY sndprefix;

次のような正しい応答が得られます。

 sndprefix  COUNT(*)
 22     3
 23     5
 32     1
 33     1
 43     1

私の質問は、このクエリをブラウザに表示し、json 形式として解析するための PHP コードは何ですか。

前もって感謝します。

コードを以前に投稿していない場合はお詫びします。編集オプションを見つけるstackoverlowのUIに慣れようとしていました..

これまでに試したコードは次のとおりです。

 <?php
 $query="SELECT sndprefix, COUNT(*) FROM `inbox` WHERE
 (
 sndprefix='22' OR 
 sndprefix='23' OR 
 sndprefix='32' OR 
 sndprefix='33' OR 
 sndprefix='34' OR 
 sndprefix='42' OR 
 sndprefix='43'
 ) 
 GROUP BY sndprefix;";

 $result = mysql_query($query);
while($sunget = mysql_fetch_array($result)){
    foreach($sunget AS $key => $value) { $conget[$key] = stripslashes($value); }
 echo "". nl2br( $sunget['sndprefix']) ."";
 }
 ?>

ありがとう。

4

1 に答える 1

8

さて..質問が更新されたようです。

あなたはそれを間違っています..複数のレベルで。悪いチュートリアルに問題があると思います。

  • クエリ

    WHERE句とその使用方法について詳しく読む必要があります。このページにはいくつかの基本的な情報が記載されていますが、MySQLに関する本(およびMySQLについてのみ、PHPは含まれていません)を見つける必要があります。

    これにより、クエリがはるかに読みやすくなります。

    SELECT 
        sndprefix AS prefix, 
        COUNT(*) AS count 
    FROM inbox 
    WHERE sndprefix IN ('22', '23', '32', '33', '34', '42', '43') 
    GROUP BY sndprefix;
    

    また、MySQLのJOINステートメントについて学びたいと思うかもしれません。なぜなら、この特定のプレフィックスのリストには共通点があると感じているからです。

    また、プレフィックスは繰り返されているため、別のテーブルに配置したほうがよい場合があります。少なくとも正規化の観点からは。

  • PHPでのデータベースのクエリ

    mysql_*古い関数を使って新しいコードを書くべきではありません。それらはもはや維持されておらず、コミュニティは非推奨プロセスを開始しており、今ではマニュアルに警告が追加されています:(赤いボックスを参照)。

    代わりに、プリペアドステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。決定できない場合は、この記事を選択するのに役立ちます。あなたが学びたいのであれば、ここに非常に良いPDO関連のチュートリアルがあります。

    あなたがデータベースと対話するためにPDOを使用していると仮定しましょう(私はMySQLiよりもそれを好むだけです)。

    $connection = new PDO(
                      'mysql:host=localhost;dbname=my_magc_db;charset=UTF-8', 
                      'username', 'password');
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    // the connection has been established, and object configured
    
    $sql = 'SELECT 
                sndprefix AS prefix, 
                COUNT(*) AS count 
            FROM inbox 
            WHERE sndprefix IN ('22', '23', '32', '33', '34', '42', '43') 
            GROUP BY sndprefix';
    
    $statement = $connection->query( $sql );
    // no need to prepare the statement this time, because values are predefined
    // if values '22', '23', etc. depend on user input, code would be different
    
    $data = $statement->fetchAll(PDO::FETCH_ASSOC);
    // now $data contains all the values.
    // you van use var_dump($data) to "look inside" variable
    
  • JSONを作成する

    $dataすでにすべての値を含む配列であるため、これを記述してJSONを生成できます
    echo json_encode( $data );

  • 出力する

    すでに配列があるので、次のように書くことができます。

    foreach ( $data as $row ) {
        echo $row['prefix'], ' ', $row['count'], PHP_EOL, '<br>';
    }
    

    質問は ?

于 2012-06-10T16:05:13.437 に答える