0

この SO Question: MYSQL UPDATE: Is it possible to confirm some fields first?によると、

UPDATEin で次のようなことができますMySql

UPDATE snakes_tb 
       SET snake_pic_urls= CONCAT(snake_pic_urls,'*".$newSnakePic."'), 
           snake_default_pic = IF(snake_default_pic = '' OR snake_default_pic = 'NO_PIC' ,'default_pic',snake_default_pic) 
WHERE snake_id={$id}

IFステートメントの実装に注目してください。このメソッドは、クエリでのサブクエリの使用に直面しています。

ただし、それを念頭に置いて、 を使用して同様のことを行うにはどうすればよいでしょSELECTうか?

次の例を想定します。

<?php
///The Bad String in with which columns should NOT be selected.
$badString ="_none";

このクエリにはColumns、The Longest Way を含む可能性のある約 10 のクエリが$badString; あり、場合によっては実際には非現実的です。

$selectQuery ="SELECT * FROM snakes_tb WHERE snake_is_deadly= 'Yes' AND col1 <> $badString AND col2 <> $badString AND col3 <> $badString AND col4 <> $badString AND col5 <>$badString etc...";

この方法はより正確なように見えますが、チェックする列の数が妥当な数よりも多い場合、実用的ではありません。UPDATEを使用した上記のクエリを考えると、次のIF statementようなクエリを成功させる最善の方法は何でしょうかSELECT1)SELECTすべての行と列、2)で列を持たない行のデータのみを表示します。$badString長い道のりは必要ありませんか?

つまり、SELECTどの列にも の値がない行のみ$badString

4

1 に答える 1

2

これは私が考えることができる最も簡単です:

SELECT *
FROM snakes_tb
WHERE '$badString' NOT IN (col1, col2, col3, col4, col5, ...)
AND snake_is_deadly = 'Yes'

クエリで明示的に名前を付けずに列をテストする方法はありません。コード内のすべての列名をハードコーディングしたくない場合は、 を使用information_schemaして列のリストを取得し、そこからクエリを生成できます。

于 2013-07-05T17:06:38.947 に答える