INSTR でフィールドの文字列検索
フィールドに、'1,2,3'なんて文字列が格納されている場合、 '1'とか'2'とかの単体の検索を複数一気にかけたい場合、
select * from テーブル名 where INSTR(フィールド名,'1') and INSTR(フィールド名,'2');
これで。
制作に関する私的なメモです
フィールドに、'1,2,3'なんて文字列が格納されている場合、 '1'とか'2'とかの単体の検索を複数一気にかけたい場合、
select * from テーブル名 where INSTR(フィールド名,'1') and INSTR(フィールド名,'2');
これで。
条件文 ? 条件文がtrueの時の処理 : 条件文がfalseの時の処理 ;
例えば、 $_SESSION["hoge"] = $hoge != "" ? $hoge : "";
は、 if ($hoge != ""){ $_SESSION["hoge"] = $hoge; } else { $_SESSION["hoge"] = ""; }
と同じ処理になるので、場合によっては処理をすっきり書くことができる。
MySQL文で、LEFT JOINを使用すると、指定したフィールドを条件にテーブルを結合してくれるが、その際にWHERE文で動きが特殊なので記載しときます。
例えば、こんな文。 SELECT * FROM?tb1 LEFT JOIN?tb2?ON?tb1.id = tb2.id WHERE tb2.name = NULL;
この場合、結合したテーブル tb2 のnameフィールドがNULLの場合、情報を呼び出す感じになっているが、実際データとして、NULLが入っていないと、抽出されるデータは存在しない状態になってしまう。
それでは困るのでなんとかならないか検索したところ、グッドな関数を発見。
IFNULL ってやつです。
これを使うとこんな感じ。 SELECT * FROM?tb1 LEFT JOIN tb2 ON?tb1.id = tb2.id WHERE IFNULL(tb2.name,0) = '0';
要は、NULLの場合、第二引数に指定している0に置き換えてやり、その置き換えたものをWHERE文で判断している形になります。
INを用いる事で、SQL文がひとまとまりにできます。
例えば、 UPDATE テーブル名 SET del_flag = '1' WHERE id = '1'; UPDATE テーブル名 SET del_flag = '1' WHERE id = '2'; UPDATE テーブル名 SET del_flag = '1' WHERE id = '3'; と三つの文を書かなければならないところを、
UPDATE テーブル名 SET del_flag = '1' WHERE id IN ('1','2','3');
とする事で、ひとまとまりの文にできます
さくらでのSmarty設置ですが、 まず、公式サイト(http://www.smarty.net/)から、Smarty本体をDL。
解凍します。
解凍したものの中に、libsフォルダがあるので、それをさくらのサーバーにアップする。 さくらのサーバーの公開ディレクトリまでのパス構造は、 /home/アカウント名/www になっているが、公開ディレクトリより上層のディレクトリにも設置可能な為、 /home/アカウント名/ に、上記libsフォルダをアップロード。
templatesディレクトリ&templates_cディレクトリも、公開ディレクトリより上層へ設置したかった為、 MySmarty.class.phpを作成。内容は↓
<?php define ("ROOT_DIR" ,$_SERVER['DOCUMENT_ROOT']."/.."); require_once("Smarty.class.php"); class MySmarty extends Smarty { function MySmarty () { $this->template_dir = ROOT_DIR."/templates"; $this->compile_dir = ROOT_DIR."/templates_c"; $this->left_delimiter = "<{"; $this->right_delimiter = "}>"; $this->Smarty(); } } ?>
デリミタも、<{}>に変更してます。 libs内へアップロード。
phpでの呼び出し時は、
require_once ("../libs/MySmarty.class.php" );
で、いけました。