2

mysqlクエリを実行する必要がありますが、その方法がわかりません。

$x(分割した後)2つのテーブルフィールドを足し合わせて、phpの値よりも大きい行を選択したいと思います。

擬似コード:

 SELECT * FROM table WHERE (field_a/50 + field_b/20)  > $x

これ$xはphp値であり、必要な合計です。

誰かヒントがありますか?

4

2 に答える 2

3

これは、ほとんどあなたが書いた擬似コードです。

$x = 100; // example
$x = mysql_real_escape_string($x); // "securing" the value.

$sql = "SELECT * FROM table WHERE (field_a/50 + field_b/20)  > '$x'";

$result = mysql_query($sql);

パラメータの使用はより洗練されていますが、あなたはその考えを理解しました。$xこのようにして、空の場合や予期しない値がある場合にSQLクエリを混乱させることができます。mysql_real_escape_stringクエリで使用する前に、を使用して値をエスケープするこの問題を処理しました。

編集

MySQLiを使用した同じ例:

$stmt = $mysqli->prepare("SELECT * FROM table WHERE (field_a/50 + field_b/20) > ?");

// "i' is a format string, each "i" means integer
$stmt->bind_param("i", $x); // use "d" instead of "i" for double

$stmt->execute();
$stmt->bind_result($col1, $col2);
于 2012-07-30T16:20:15.710 に答える
0

それはあなたがそれについて行く方法とほとんど同じです。クエリ文字列を作成する前に$xが適切に数値であることを確認する以外に、それがあります。

1つの小さな提案-この種のクエリを頻繁に行う場合はfield_a/field_b、別のフィールドにデータの値をキャッシュすることを検討することをお勧めします。これはわずかな非正規化ですが、このフィールドにインデックスを付けることができ、おそらくパフォーマンスが向上します。現在、派生/計算された値でwhereを実行しているため、インデックスを使用できません。

于 2012-07-30T16:18:57.580 に答える