2017-08-01 7 views
-2

私はいくつかのデータを取得しようとしていますが、テーブルには "sysload"という名前のフィールドがあります。しかし、これはvar(文字列)型です。そのデータは "0.0、0.2、0.5"のように3つの数字をコンマで区切って示します。しかし、SQLでは、最後の数値(この例では0.5)だけを "where"で比較する必要があります。だから私はそれをどのように使うことができますか?私のコード:SQLで "explode"のようなPHPメソッドを使用する方法

$termquery=mysql_query("SELECT a.terminal FROM terminal_server_log a 
inner join 
     (
      SELECT terminal, MAX(timestamp) timestamp 
      FROM terminal_server_log 
      group by terminal 
     ) b on (b.terminal=a.terminal and a.timestamp=b.timestamp) 
WHERE explode(',', sysload)[2]>$number"); 

最後の行は、私は「$番号」で比較する、最も重要なものですが、私が「爆発」を使用することはできませんようです。ありがとう

+1

クエリの変数外に爆発し、それを使用しています。 – GrumpyCrouton

+0

[Little Bobby](http://bobby-tables.com/)によると[あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています](http://stackoverflow.com/questions/60174/how-cani-i- PHPでのSQLインジェクション防止)**。 [MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)の[Prepared Statements](http://en.wikipedia.org/wiki/Prepared_statement)について学んでください。 ** [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)**でも安全ではありません! – GrumpyCrouton

+1

** **、新しいコードには 'mysql_ *'関数を使わないでください**。それらはもはや維持されず、コミュニティは[非推奨プロセス](http://news.php.net/php.internals/53799)を開始し、mysql_ *関数はPHP 7で正式に削除されました。 [prepared statements](https://en.wikipedia.org/wiki/Prepared_statement)について学び、 'PDO'か' mysqli_ * 'を使います。あなたが決定できない場合、[この記事はあなたの最善の選択肢を選ぶのに役立ちます](http://php.net/manual/en/mysqlinfo.api.choosing.php)。 – GrumpyCrouton

答えて

0

PHP関数はSQLクエリ内では機能しません。

このフィルタをクエリから削除してPHP側でフィルタリングするか、またはいくつかのmysql文字列関数を使用してカスタムの分解関数を作成することができます。このリンクで

は例があります(それが働いている場合、私はチェックしませんでした) Equivalent of explode() to work with strings in MySQL

関連する問題