十二国記サーチを作る内検索 / 「SQLite」で検索した結果

検索 :
  • メモ/SQLite
    SQLiteメモ レコードをランダムに取得 LIKE用メタ文字のエスケープ 2010/10/15 21 26 44更新
  • メモ/SQLite/LIKE用メタ文字のエスケープ
    LIKE用メタ文字のエスケープ  SQLiteでもLIKEは使え、%と_がメタ文字になります。%は任意の複数文字、_は任意の一文字に相当。  ここでPerlとかだと\がエスケープ文字で、%や_自体を検索したいときは「\%」等とすればいいはずですが。でもSQLiteには既定のエスケープ文字がないそうで、どれをエスケープ文字に使うか明示しないといけないらしい。こんなふうに。 SELECT * FROM D_SITE WHERE NAME LIKE abc\%あいう ESCAPE \ (\をエスケープ文字として使用)  もちろんパターンに%や_が含まれていなければESCAPEを指定する必要もないわけで、さらにエスケープ文字を任意に指定するようにするとなると、こんな感じでしょうか。 function sqlescape($str, $escapechar= $ , $enc...
  • ビューを作る
    ...に。  ただSQLite側でうまくいっても、CGIとして(今のところはApacheのモジュールとして動かしてるけど)動作させると動かないSQLがあり、かなりはまりました。今回、データベースを設計しなおしていて、「あれ、動かないなぁ。プロトでは動いたのになぁ」というのが多々あり。このWikiを作る前にとりあえず作ってみたプロトタイプと見比べてみたら、CREATE VIEW 文の GROUP BY 句の違いのせいでした。 データを取得できなかったSQL CREATE VIEW V_SUM_MEDIA AS SELECT S.MEDIA AS ID, M.NAME AS NAME, COUNT(S.ID) AS TOTAL FROM D_SITE S, M_MEDIA M WHERE S.MEDIA = M.ID GROUP BY ID; データを取得できた、プロトタイプ...
  • マスタを作る
    ...ろいろ調べていったらSQLiteの存在を知り、用途的規模的に十分使いものになりそうということでこれに決定。  サーチシステム自体の設定値を格納する基本マスタテーブルもだけど、まずは十二国記関連の基本情報を格納したマスタが要りますね。国マスタとか、キャラマスタとか、そういうの。たとえば一番簡単と思われるマスタはこんな感じ。 ※対象を特化したスクリプトなので、汎用的に全部同じテーブルに突っ込むというのはなし。そっちのほうが簡単にメニュー項目を増減できるけどね。 テーブル名称:国マスタ テーブル名:M_COUNTRY PRIMARY KEY 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ SORT_KEY INTEGER 表示制御用 NAME TEXT ○ 名称 LONG_NAME TEXT ○ 長い名称  DATEとかV...
  • メモ
    メモ 構想 SQLite PHP 2010/09/06 10 46 38
  • メニュー
    ... ビュー メモ構想 SQLite PHP コメント 更新履歴 取得中です。
  • データテーブル/更新履歴
    ...がTEXT型なのは、SQLiteには日付や時刻用のデータ型がなく、テキストで持つか数値で持つかしかないため。関数はいろいろあるので、Date型やDateTime型、Timestamp型が普通にあると勘違いしちゃうけどね。 CREATE文 CREATE TABLE [D_HIST]( [SITE_ID] INTEGER NOT NULL ,[UPD_DATE] TEXT NOT NULL ,[TEXT] TEXT NOT NULL ,PRIMARY KEY(SITE_ID,UPD_DATE) ); 2010/09/06 10 54 26
  • メモ/PHP/sprintfに配列を渡す
    ...  ところで、SQLiteではEXISTSを使えないと思い込んでいたけど、あらためてリファレンスを見たらしっかり書いてありますね。最初に見落としたかな? ってことは条件に合致するサイトを引っ張ってくるときに上記のようなIN句を考えていたけど、EXISTSで判定すればいいかな。  でも問題はパフォーマンス。EXISTSの場合、サブクエリから実行される通常のサブクエリと違って、まず外部クエリから実行されるんだよね? IN句の値の羅列はパフォーマンスが悪いにしても、実行に先立ってまず全サブクエリを一回ずつ実行、その後外部クエリを実行――となるように思うけど。翻ってEXISTSは外部クエリ→EXISTSを擁するサブクエリ、と毎回実行されるんだよね? この認識、間違ってるかなー。  とりあえず安直にINで書いていたサブクエリをEXISTSで書き直して、実際にシステムができあがっ...
  • DB初期化
    ...Bの初期設定。最初はSQLiteファイルを手動で設定すればいいなんて考えていたけど、最低限の初期設定は自動化しようかと。  もっともフォームを使って登録とかじゃなく、作成済みのSQLを順に流すだけ。初期設定を変えたい場合は、直接SQLを変更してもらう感じ。  処理内容の概略は以下の通り。 設置者:サーバにスクリプトを置く 設置者:初期化用ページにアクセスする スクリプト:DBにマスタデータがなければ生成する。完全にマスタがないわけではなく、一部欠損しているなどの不整合状態ならアボートさせる(現状のデータファイルを削除なりリネームして退避なりした後で再アクセスするよう促す) スクリプト:DBに管理者パスワードが設定されていなければ(初期状態)、パスワードを含めて管理者用初期設定をさせる。管理者パスワードが既に設定されていたら、アクセスされるのはおかしい(というか必要ない)...
  • メモ/構想
    ... バックアップ処理。SQLiteファイルが更新されていたら、当日の年月日をファイル名にしてコピー&圧縮。バックアップしたファイルは一ヶ月ぶんくらい持っておく(それ以上古いものは削除)。 SQLiteファイルのVACUUM。頻度は月一回程度くらい? 一ヶ月以内に更新されていたらVACUUMを実行。 リンク切れチェック。頻度は数日に一度くらい? 三回連続でアクセスできなかったら、サイトのステータスをエラーにし、NOTEに事由を追加。 バナーURLチェック。これも頻度は数日に一度くらい? 三回連続でアクセスできなかったら、NOTEに事由を追加して、バナーURLクリア。 2010/09/16 01 11 17更新
  • メモ/SQLite/レコードをランダムに取得
    レコードをランダムに取得  random関数を使う SELECT * FROM TABLE1 ORDER BY RANDOM() 2010/10/15 21 05 53更新
  • テストデータを作る
    ...順に流すだけ。最初はSQLiteで使えるSQLを確認しながらだったこともあって、頻繁にエラーも出したし面倒だったけど、環境が整ってきたらかなり省力化できるようになりました。  プロトタイプとはテーブル名やカラム名が微妙に違うので、それに合わせてPHPコードを修正、登録サイトがある項目のみメニューに表示、当該メニュー項目に張ってあるリンクをクリックして該当するサイト情報を整形表示、までは動作することを確認。  もっともサイト情報は100件もないため、当然ながらあっという間に表示されるけど。 検索結果  せっかくなのでヘッダのHTMLも作り、メニューにもちゃんとスタイルを指定して検索を実行した画面がコレ。  なおデバッグ中なので、その辺の余計な情報も出してます。  まあ、悪くはないと思うけど……本当はフレームにしたくないので、その辺が不満。  最初...
  • データテーブルを作る
    データテーブルを作る  サイトに付随する登録データのうち、要素が可変のものは別テーブルに。そうすればサイト情報自体には入れなくていいから「カテゴリ用カラムをいくつ入れよう?」などと悩む必要もなくなります。  重要度(PRIORITY)を指定できるようにしておけば、サイトごとにそれでソート可能だし、登録数が多いようなら上限を設けて、一覧には一定数しか出さないようにすればいい(詳細情報ページには全部出す)。  したがって各種登録データを格納するテーブル群は、ユーザ情報とサイト情報以外はほとんど各マスタの値を保存するだけとなり、かなり小さなテーブルに。  たとえばこんなサイト情報(D_SITE)と基調(D_MOOD)が登録されていたとして、 ID NAME MEDIA 1 ほげほげ 0 2 ほにゃらら 1 3 ふにふに 0 SITE_ID MOOD_ID 1 1 1 ...
  • メモ/PHP/拡張モジュールの読み込みエラーでApacheを起動できない
    拡張モジュールの読み込みエラーでApacheを起動できない  PHPを5.2.13から5.2.14に上げるついでに、面倒になって拡張モジュールを全部インストールしました。ところが、まあ以前からそうだったんだけど、特定の拡張モジュールの読み込みでApacheがエラーになって再起動できない。以前はphp.iniの当該箇所をコメントアウトしてお茶を濁したものの、今回は使いたいモジュール(cURL)だったのでようやくちゃんと調べました。  どうやらPHP4の頃にインストールしたときのphp.iniがsystem32にずっと残っていて(日付は五年前……)、それが悪さをしていた模様。  うーん。こんなところにあったとは知らなんだ。インストールしたPHPフォルダ直下のしかいじってなかったよ。  とりあえずPHP4も残してはあるので、system32直下のphp.iniはそっちに移動、...
  • コメント
    コメント  SQLやプログラムコードの誤り、ジャンルサーチに関する誤認識、機能の漏れ等の指摘があれば、こちらでどうぞ。 名前 2010/09/06 10 50 07
  • トップページ
    最終更新:0000-00-00 00 00 00  CGIのネタとして、趣味に走ってサーチを作ってみます。内容は十二国記の同人サイトに特化した登録型サーチ用スクリプト。  要は勉強のネタなので実用的かどうかは不問。使い物になるかどうかも不明。まかり間違って実用になるようなら公開するけど、そうじゃなければスクリプト自体は非公開。  ちなみにコンセプトは、管理者が手抜きで運営できるサーチ(笑)。  とりあえず検索結果のイメージはこんな感じ。上が検索結果用。下が詳細情報。  まあ、このWikiを作ったとき、既にサイト情報まわりのテーブルはすべて作成して適当にサイトデータを作って登録、登録サイトがある項目のみでメニュー表示(↓)&そのメニュー項目リンククリックによる単一条件のみの検索結果表示、まではプログラムを作ってみたんですけどね。  で、そうしたらちょっ...
  • データテーブル/サイト情報
    サイト情報(D_SITE)  サイトの基本情報を格納するテーブル。カテゴリや取り扱いキャラなど、要素が可変の場合は別テーブルで扱い、それらはサイト情報テーブルのIDで紐づける。  他の単純なテーブルと違ってカラムが多いし、基本項目以外はまだどうしようか迷っているので暫定。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ オートナンバー URL TEXT ○ サイトURL(UNIQUE制約) NAME TEXT ○ サイト名 NAME_KANA TEXT サイト名(ふりがな) USER_ID TEXT ○ ユーザ情報のID HANDLE TEXT ○ 登録者名。デフォルトはユーザ情報から HANDLE_KANA TEXT 登録者名(ふりがな)。デフォルトはユーザ情報から SERVER_TYPE INTEGER ○ レ...
  • マスタテーブル/サイト形態マスタ
    サイト形態マスタ(M_SITE_TYPE)  HTML(既定値)、ブログ、Wikiといった形態を定義するマスタテーブル。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ SORT_KEY INTEGER 表示制御用 NAME TEXT ○ 名称 CREATE文 CREATE TABLE [M_SITE_TYPE] ( [ID] INTEGER NOT NULL ,[SORT_KEY] INTEGER ,[NAME] TEXT NOT NULL ,PRIMARY KEY(ID) ); 登録データ一覧 ID SORT_KEY NAME 0 0 HTML 1 1 ブログ 2 2 Wiki 初期設定用INSERT文 INSERT INTO M_SITE_TYPE(ID,SORT_KEY,NAME) VALUES(0,0, H...
  • データテーブル/作品規模
    作品規模(D_SCALE) テーブル定義 PK 名称 データ型 NOT NULL 内容 ● SITE_ID INTEGER ○ サイト情報のID ● SCALE_ID INTEGER ○ 作品規模マスタのID PRIORITY INTEGER 重要度 CREATE文 CREATE TABLE [D_SCALE]( [SITE_ID] INTEGER NOT NULL ,[SCALE_ID] INTEGER NOT NULL ,[PRIORITY] INTEGER ,PRIMARY KEY(SITE_ID,SCALE_ID) ); 2010/09/06 10 56 09
  • データテーブル/キャラ
    キャラ(D_CHARA) テーブル定義 PK 名称 データ型 NOT NULL 内容 ● SITE_ID INTEGER ○ サイト情報のID ● CHARA_ID INTEGER ○ キャラマスタのID PRIORITY INTEGER 重要度 CREATE文 CREATE TABLE [D_CHARA]( [SITE_ID] INTEGER NOT NULL ,[CHARA_ID] INTEGER NOT NULL ,[PRIORITY] INTEGER ,PRIMARY KEY(SITE_ID,CHARA_ID) ); 2010/09/06 10 55 19
  • データテーブル/基調
    基調(D_MOOD) テーブル定義 PK 名称 データ型 NOT NULL 内容 ● SITE_ID INTEGER ○ サイト情報のID ● MOOD_ID INTEGER ○ 基調マスタのID PRIORITY INTEGER 重要度 CREATE文 CREATE TABLE [D_MOOD]( [SITE_ID] INTEGER NOT NULL ,[MOOD_ID] INTEGER NOT NULL ,[PRIORITY] INTEGER ,PRIMARY KEY(SITE_ID,MOOD_ID) ); 2010/09/06 10 55 54
  • データテーブル/カテゴリ
    カテゴリ(D_CATE) テーブル定義 PK 名称 データ型 NOT NULL 内容 ● SITE_ID INTEGER ○ サイト情報のID ● CATE_ID1 INTEGER ○ カテゴリマスタのID1 ● CATE_ID2 INTEGER ○ カテゴリマスタのID2 PRIORITY INTEGER 重要度(数が小さいほど高い) CREATE文 CREATE TABLE [D_CATE]( [SITE_ID] INTEGER NOT NULL ,[CATE_ID1] INTEGER NOT NULL ,[CATE_ID2] INTEGER NOT NULL ,[PRIORITY] INTEGER ,PRIMARY KEY(SITE_ID,CATE_ID1,CATE_ID2) ); 2010/09/06 10 53 48
  • データテーブル/注意情報
    注意情報(D_CAUTION) テーブル定義 PK 名称 データ型 NOT NULL 内容 ● SITE_ID INTEGER ○ サイト情報のID ● CAUTION_ID INTEGER ○ 注意情報マスタのID PRIORITY INTEGER 重要度 CREATE文 CREATE TABLE [D_CAUTION]( [SITE_ID] INTEGER NOT NULL ,[CAUTION_ID] INTEGER NOT NULL ,[PRIORITY] INTEGER ,PRIMARY KEY(SITE_ID,CAUTION_ID) ); 2010/09/06 10 54 45
  • データテーブル/国
    国(D_COUNTRY) テーブル定義 PK 名称 データ型 NOT NULL 内容 ● SITE_ID INTEGER ○ サイト情報のID ● COUNTRY_ID INTEGER ○ 国マスタのID PRIORITY INTEGER 重要度 CREATE文 CREATE TABLE [D_COUNTRY]( [SITE_ID] INTEGER NOT NULL ,[COUNTRY_ID] INTEGER NOT NULL ,[PRIORITY] INTEGER ,PRIMARY KEY(SITE_ID,COUNTRY_ID) ); 2010/09/06 10 55 37
  • データテーブル/カップリング
    カップリング(D_CP) テーブル定義 PK 名称 データ型 NOT NULL 内容 ● SITE_ID INTEGER ○ サイト情報のID ● CHARA_ID1 INTEGER ○ キャラマスタのID(攻め) ● CHARA_ID1 INTEGER ○ キャラマスタのID(受け) REVERSE INTEGER ○ 0 リバなし、1 リバあり PRIORITY INTEGER 重要度  REVERSEカラムは同性同士のカップリングの場合を想定。男女CPの場合は実際に逆転した性行為を行なってかぎり、攻め=男、受け=女とします。 CREATE文 CREATE TABLE [D_CP]( [SITE_ID] INTEGER NOT NULL ,[CHARA_ID1] INTEGER NOT NULL ,[CHARA_ID2] INTEGER NOT NULL ,[RE...
  • データテーブル/カップリング傾向
    カップリング傾向(D_CP_TYPE)  最初はカップリングテーブルでビューを作ればいいと思ったけど、カップリングなしをどうするかとか、一覧にない原作キャラカップルを取り扱っている場合等々を考え、やはりこれ単体でテーブルを作ることに。  サイトの新規登録時の既定値は、カップリングの情報を元に自動設定すれば、大抵の場合はそのままユーザが修正せずとも登録できるから面倒はないかと。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● SITE_ID INTEGER ○ サイト情報のID SEX1 INTEGER ○ キャラマスタの性別ID(攻め) SEX2 INTEGER ○ キャラマスタの性別ID(受け) PRIORITY INTEGER 重要度 CREATE文 CREATE TABLE [D_CP_TYPE]( [SITE_ID] INTEGER NOT ...
  • メモ/PHP/die、exitで日本語が化ける
    die、exitで日本語が化ける  単純に die( DBにアクセスできません。 );  と書いたとすると、ある環境で表示できたとしても、別の環境では化けたりします。文字コードを指定していないので、当然と言えば当然です。  英数字だけのメッセージにするという手もありますが、日本語等Ascii文字以外を使いたい場合は、HTTPのレスポンスヘッダで文字コードを指定すればいいかと。dieやexitのたびに指定するのは面倒なので、関数にします。 function abort($status=0) { if (is_string($status) !headers_sent()) { header( Content-Type text/plain; charset=UTF-8 ); } die($status); }  とりあえずこれで、Firefox3.6、IE8では表...
  • デザイン試行錯誤
    デザイン試行錯誤  当初のフレームじゃない検索画面のイメージはこんな感じ。  でもねー、検索メニュー項目のリンククリックによる実行だとGETだから、再表示時に入力状態を復元できないんだよね。もちろんJavaScriptを使えば可能だけど、それは避けたい。  で、スタイルをリンクっぽくしたSUBMITボタンで代用できないかと試してみたものの。  borderなし、text-alignはleft、vertical-alignはmiddle、paddingは0px、background-colorはtransparent等々と指定したら、IE8.0だと何とかそれっぽくはなりました。もちろん訪問済みリンクの色を変えるなんて芸当は不可能だけど。  下図は、上の「PC向け」のみSUBMITボタン、その他、つまり「HTML」と下の「PC向け」がリンクです。 ...
  • マスタテーブル/注意情報マスタ
    注意情報マスタ(M_CAUTION)  閲覧上の注意事項を定義するマスタ。JavaScriptがONになっていないと作品が見られないなどの純粋に環境的な要素と、作品の内容に関する注意事項(グロとかパラレル等、閲覧者を選ぶ内容)の両方を定義する。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ KIND INTEGER ○ 0 環境関連、1 作品内容関連 SORT_KEY INTEGER 表示制御用 NAME TEXT ○ 名称 LONG_NAME TEXT ○ 長い名称 DESC TEXT ○ 説明文 CREATE文 CREATE TABLE [M_CAUTION] ( [ID] INTEGER NOT NULL ,[KIND] INTEGER NOT NULL ,[SORT_KEY] INTEGER ,[NAME] T...
  • メモ/PHP/FirefoxでローカルのPHPを開けない
    FirefoxでローカルのPHPを開けない  FirefoxでローカルのPHPファイルが開けなくなった場合を参考に、プロファイルのmimeTypes.rdfを編集する。以下、引用。 まずプロファイルフォルダを探す。XPだと下記にあると思う。C \Documents and Settings\ユーザ名\Application Data\Mozilla\Firefox\Profiles\プロファイルID そのフォルダの中からmimeTypes.rdfを探してテキストエディタで開く。 application/x-httpd-phpと書いてあるRDFを全部消す Firefox再起動  ところが上記では解決できない場合があります。  自分も拡張モジュールを限定してインストールしていたときは上記対処で解決しました。ところがどうやら拡張モジュールをすべて指定してインストールし直したとき...
  • テンプレートエンジン
    テンプレートエンジン  何とかPHPに慣れてきたため、最初は全部自前で書くつもりだったのを、この際やはりテンプレートエンジンを使おうと考え直しました。  ただ、何せ勉強でやり始めたとあって、そもそも表示ページ用PHPファイルと、インクルードするPHPファイルを同じ場所(ドキュメントルート下)に置いてしまったんですよね。でもこれでテンプレートエンジン(Smartyを使用)用に書き直すともっとごちゃごちゃしてくるし、そもそもセキュリティ的にまずいし――ただでさえセキュリティホールを作りこみやすいPHPなので、インクルードするものはドキュメントルートより上に置くようにしました。ちょっと修正が面倒だったけど。  しかしPHPって、どっか一ヶ所に基準パスを指定しておいて、それを使うようにはできないんですかね。一応汎用で使うPHPファイルに定数としてパスを定義してみたけど、その個々のファイ...
  • マスタテーブル/運営状態マスタ
    運営状態マスタ(M_MANAGE_STATUS)  運営状態を定義するマスタテーブル。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ NAME TEXT ○ 名称 LONG_NAME TEXT ○ 長い名称 CREATE文 CREATE TABLE [M_MANAGE_STATUS] ( [ID] INTEGER NOT NULL ,[NAME] TEXT NOT NULL ,[LONG_NAME] TEXT NOT NULL ,PRIMARY KEY(ID) ); 登録データ一覧 ID NAME LONG_NAME 0 通常 通常 7 休止 一時更新停止 8 停止 無期限更新停止 9 閉鎖 閉鎖 初期設定用INSERT文 INSERT INTO M_MANAGE_STATUS(ID,NAME,LONG_NAME) ...
  • メモ/PHP/trim関数で文字化け
    trim関数で文字化け  検索結果の検証をしていたら、入力文字列によっては条件が無視されることが判明。  なお文字列についてはこんな処理をしてます。 ホワイトスペース(全角空白含む)をトリミング バリデーション:UTF-8で解釈できない場合は長さゼロの文字列で上書き  その結果、POSTデータとしては渡されてるのに、しっかり長さゼロの文字列で上書きされてる。試しに上書きしないようにすると一部が文字化け。そっか、このせいでUTF-8で解釈できないと見なされたんだな……。  元凶はtrim関数。なんと!マルチバイト文字に対応していないんだそうで……(PHP trimで文字化け)。  仕方がないので、参考サイトを見習って自前の関数を作成。 function mb_trim($str, $charlist= [ space ]\0  , $encoding= UTF-8 ){ m...
  • マスタテーブル/作品規模マスタ
    作品規模マスタ(M_SCALE)  漫画や小説を扱っているサイトの場合に登録可能な、長編/短編の別を定義するマスタテーブル。  もっともウェブだと、市販の書籍のような一般的な基準ではなく作者の感性で「長編」「短編」と銘打っているため、説明文にサーチ内での共通認識としての定義も格納しておく。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ SORT_KEY INTEGER 表示制御用 NAME TEXT ○ 名称 DESC TEXT 説明文 CREATE文 CREATE TABLE [M_SCALE] ( [ID] INTEGER NOT NULL ,[SORT_KEY] INTEGER ,[NAME] TEXT NOT NULL ,[DESC] TEXT ,PRIMARY KEY(ID) ); 登録データ一覧  D...
  • マスタテーブル/国マスタ
    国マスタ(M_COUNTRY)  国情報を格納するマスタテーブル。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ SORT_KEY INTEGER 表示制御用 NAME TEXT ○ 名称 LONG_NAME TEXT ○ 長い名称 CREATE文 CREATE TABLE [M_COUNTRY] ( [ID] INTEGER NOT NULL ,[SORT_KEY] INTEGER ,[NAME] TEXT NOT NULL ,[LONG_NAME] TEXT NOT NULL ,PRIMARY KEY(ID) ); 登録データ一覧 ID SORT_KEY NAME LONG_NAME 1 1 慶 慶東国 2 2 雁 雁州国 3 3 戴 戴極国 4 4 芳 芳極国 5 5 漣 漣極国 6 6 巧 巧州国 7 7 恭...
  • マスタテーブル/媒体マスタ
    媒体マスタ(M_MEDIA)  閲覧媒体(PC/携帯)を格納するマスタテーブル。PC不可の携帯サイトやその逆、PCから携帯サイトを敬遠する向きもあるため作成。  もっとも携帯を考慮してスクリプトを作るつもりはないので(テストがめんどい)、あくまで作っておくだけ。もしくはPCから携帯サイトを登録するとかなら可。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ SORT_KEY INTEGER 表示制御用 NAME TEXT ○ 名称 CREATE文 CREATE TABLE [M_MEDIA] ( [ID] INTEGER NOT NULL ,[SORT_KEY] INTEGER ,[NAME] TEXT NOT NULL ,PRIMARY KEY(ID) ); 登録データ一覧 ID SORT_KEY NAME 0 0 ...
  • マスタテーブル/カテゴリマスタ
    カテゴリマスタ(M_CATE)  カテゴリを格納するマスタテーブル。  少なくとも絵系や文系等でグループ化は必要なため、プライマリキーは2個。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID1 INTEGER ○ カテゴリグループ ● ID2 INTEGER ○ カテゴリ SORT_KEY INTEGER 表示制御用 NAME TEXT ○ 名称 LONG_NAME TEXT ○ 長い名称 DESC TEXT 説明文 CREATE文 CREATE TABLE [M_CATE] ( [ID1] INTEGER NOT NULL ,[ID2] INTEGER NOT NULL ,[SORT_KEY] INTEGER ,[NAME] TEXT NOT NULL ,[LONG_NAME] TEXT NOT NULL ,[DESC] TEXT ,PR...
  • マスタテーブル/閲覧状態マスタ
    閲覧状態マスタ(M_BROWSE_STATUS)  閲覧状態を定義するマスタテーブル。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ NAME TEXT ○ 名称 LONG_NAME TEXT ○ 長い名称 CREATE文 CREATE TABLE [M_BROWSE_STATUS] ( [ID] INTEGER NOT NULL ,[NAME] TEXT NOT NULL ,[LONG_NAME] TEXT NOT NULL ,PRIMARY KEY(ID) ); 登録データ一覧 ID NAME LONG_NAME 0 閲覧可 全コンテンツ閲覧可 7 一部閲覧不可 一部コンテンツ閲覧不可 8 一部閲覧可 一部コンテンツ閲覧可 9 閲覧不可 全コンテンツ閲覧不可 初期設定用INSERT文 INSERT INTO M_...
  • マスタテーブル/制限範囲マスタ
    制限範囲マスタ(M_RESTRICTION)  閲覧制限の範囲を定義するマスタテーブル。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ NAME TEXT ○ 名称 LONG_NAME TEXT ○ 長い名称 CREATE文 CREATE TABLE [M_RESTRICTION] ( [ID] INTEGER NOT NULL ,[NAME] TEXT NOT NULL ,[LONG_NAME] TEXT NOT NULL ,PRIMARY KEY(ID) ); 登録データ一覧 ID NAME LONG_NAME 0 年齢制限なし 年齢制限なし 1 一部?歳以上 一部?歳以上向け 8 ?歳以上向け ?歳以上向け主体 9 ?歳未満不可 ?歳未満閲覧不可  ?の部分は、表示時に年齢を埋め込む。 初期設定用INS...
  • マスタテーブル/基調マスタ
    基調マスタ(M_MOOD)  漫画や小説を扱っているサイトの場合に登録可能な、シリアス、ほのぼのといった雰囲気の別を定義するマスタテーブル。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ SORT_KEY INTEGER 表示制御用 NAME TEXT ○ 名称 CREATE文 CREATE TABLE [M_MOOD] ( [ID] INTEGER NOT NULL ,[SORT_KEY] INTEGER ,[NAME] TEXT NOT NULL ,PRIMARY KEY(ID) ); 登録データ一覧 ID SORT_KEY NAME 1 1 シリアス 2 2 ほのぼの 3 3 ラブラブ 4 4 コメディ 5 5 ギャグ 初期設定用INSERT文 INSERT INTO M_MOOD(ID,SORT_KEY,N...
  • マスタテーブル/カップリング傾向マスタ
    カップリング傾向マスタ(M_CP_TYPE)  CPなし、男女CP、男男CP、女女CPという、カップリングの性別傾向を定義するマスタ。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID1 INTEGER ○ ● ID2 INTEGER ○ SORT_KEY INTEGER 表示制御用 NAME TEXT ○ 名称  プライマリキーはキャラマスタの性別定義と同じ値を使い、ID1が攻めキャラの性別、ID2が受けキャラの性別。  ただしCPなしだけは性別コードがないため、便宜的に両方「2」を登録するものとする。 CREATE文 CREATE TABLE [M_CP_TYPE] ( [ID1] INTEGER NOT NULL ,[ID2] INTEGER NOT NULL ,[SORT_KEY] INTEGER ,[NAME] TEXT NO...
  • マスタテーブル/キャラマスタ
    キャラマスタ(M_CHARA)  登場人物情報を格納するマスタテーブル。 テーブル定義 PK 名称 データ型 NOT NULL 内容 ● ID INTEGER ○ SORT_KEY INTEGER 表示制御用 NAME TEXT ○ 名称 LONG_NAME TEXT ○ 長い名称 SEX INTEGER 性別。NULL 不明、0 男、1 女 COUNTRY INTEGER 所属国。国マスタのID  いちおうCOUNTRYカラムを設けてみたけど……いらないかも。サイト情報で取り扱い国を登録する際にいるかなぁと思ったものの、キャラとは関係なく、独立した項目として「取り扱い国」を登録すればいいわけだし。  でもまあ、とりあえず入れておきます。  あと所属国と生国が違う場合もあるわけだけど、そこまでは不要かなぁと。 CREATE文 CREATE TAB...
  • メモ/PHP
    PHPメモ 配列からnullの要素を削除する sprintfに配列を渡す リクエストパラメータを配列で受け取る トラブルシューティング 拡張モジュールの読み込みエラーでApacheを起動できない FirefoxでローカルのPHPを開けない 生成したHTMLコードにスタイルが適用されない trim関数で文字化け die、exitで日本語が化ける 2010/10/10 14 29 35更新
  • メモ/PHP/配列からnullの要素を削除する
    配列からnullの要素を削除する  array_filterを使う。 $arr = array_filter($arr);  第二引数にはコールバック関数を指定する。上記のように省略した場合は、結果がfalseになる要素はすべて削除されるため、結果的にnullも削除される。  空文字列や数字のゼロなど、falseと見なされる有効な要素がある場合は、ちゃんとコールバック関数を指定してnullを識別するようにすれば良さそう。  こんなふうにarray_diffを使っても良さそうだけど(未検証)。 $arr = array_diff($arr, array(null));  配列要素でループして、自前で判定→削除という方法もあるけど、PHPの配列は実はすべて連想配列らしく、途中の要素を削除しても、後続の要素は前に詰められない。なので要素削除時、大抵の言語では最大の添え字→ゼ...
  • 検索機能まとめ
    検索機能まとめ  エラーサイトがらみを除いて検索機能ができたっぽいので、ここで機能のまとめ(サイトのエラーについては、定義もそうだけど、どのタイミングでステータスを設定するかを厳密には決めていないので保留。いちおう検索結果用スタイルシートは作ってあるし、当該サイトへのリンクは張らない、ということにするつもりだけど)。  ちなみにやっとテストデータを架空のものに差し替えたのでモザイクはなし。実在のサイトと登録内容が似ていたとしても偶然です。そもそも取り扱いジャンルが同じなら表現も似通うしね。 検索機能レイアウト  左フレームに検索条件、右フレームに検索結果等を表示。  検索結果を表示する右フレームのレイアウトは、上部にダイレクト検索メニューを表示、クリックしただけで新着・更新サイト等を表示できる。 検索条件(左フレーム)  検索条件項目は、サイト形態~カップリ...
  • @wiki全体から「SQLite」で調べる

更新順にページ一覧表示 | 作成順にページ一覧表示 | ページ名順にページ一覧表示 | wiki内検索