/// BANGBOO BLOG ///

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

August 18, 2010

Tools - free icon etc
フリーアイコン
http://gigazine.net/index.php?/news/comments/20100817_woocons1/
http://gigazine.net/index.php?/news/comments/20091206_webiconset/
http://gigazine.net/index.php?/news/comments/20100312_elegantthemes_iconpack/
http://phpspot.org/blog/archives/2010/08/2010.html
http://e0166.blog89.fc2.com/blog-entry-632.html
http://pixelresort.com/blog/category/Showcase/
http://www.freeiconsweb.com/free_icon.html

フリーPSD・テーマ
http://freepsdtheme.com/
http://www.smashingmagazine.com/2010/08/19/100-free-high-quality-wordpress-themes-for-2010/
http://www.stumbleupon.com/su/4OhCh5/www.noupe.com/freebie/80-useful-psd-templates-for-designers.html

配色ツール
http://www.color-fortuna.com/color_scheme_genelator2/

サウンド
http://www.freesound.org/

Posted by funa : 04:37 PM | Web | Comment (0) | Trackback (0)


August 9, 2010

ER
ERダイヤグラムの作図ルールのまとめ。ER図

■要件定義
https://qiita.com/Saku731/items/741fcf0f40dd989ee4f8

発注者に満足感があり、下流で滞りなく開発ができソフトウェアが納品されればいい
色んな考え方ややり方があるので臨機応変に、どこまでが範囲か確認できればいいが

■設計者から開発者に渡すっぽい上流工程

///Why:システム開発の目的(要望)
現状の課題
ゴール(本来あるべき状態)
現状とゴールのギャップ(解決すべき課題)

///What:何をもって課題を解決するのか
システム導入後の業務フロー
機能要件
 システムに実装する機能一覧
非機能要件
 処理スピード、セキュリティ など様々
 
///How:具体的な使い勝手と実装方法(システム設計)
基本設計
 画面設計(UI設計)
 機能設計
 データ設計
詳細設計
 クラス図、シーケンス図
 システムアーキテクチャ
 各部位を実装する技術 など様々

■ビジネスと開発の両側で合意を取るっぽい上流工程

///要望:解決すべき課題(発注者タスク)
現状の課題
ゴール(本来あるべき状態)
現状とゴールのギャップ(解決すべき課題)

///要求:システムに実装したい機能(発注者タスク)
企画の背景(解決すべき課題)
課題解決に必要なシステムの概要
具体的に実装したい機能一覧

///検討:要求の実現性を考える(開発者タスク)
技術的に開発可能か?
予算はどの程度必要か?
納期はいつ頃になるか?

///提案:検討した結果を発注者に戻す(開発者タスク)
実装できる機能
請求する金額
納品できる期日

///要件:双方が合意した決定事項(発注者・開発者が協議して決める)
システムに実装する機能一覧
納期、請求額の目安が記載されるケースも

==========

■階層化されたシステム要件一覧(要件ツリー)の例
利益管理の強化に貢献すること
 月中であっても利益ベースでの予実達成状況を監視できること
 受注単位で粗利がわかるようになること
顧客サービスの改善に貢献すること
 受注時に納期回答できるようであること
 入荷かう出荷までロットをトレースできること
在庫管理レベルの向上に貢献すること
 余剰在庫や死蔵品を50%削減できること
 在庫データには常に現在の在庫状況が反映されていること
作業効率の向上に貢献すること
 バーコードラベルによって入出荷作業が簡便化されているとと
 配車計画をある程度自動化できること

■機能要件一覧の例
"利用者は全支店の営業部門の所属者とする。(支店は全国27箇所)"
担当者毎に、参照、登録・更新・削除、承認の権限が付与できること。
承認者が不在の場合に代理承認できること。
"パソコンだけでなく、スマートフォンからでも操作が可能なこと。(ブラウザ利用)"
過去の案件を検索できること
画面に一覧表示した内容をCSVファイルでダウンロードできること
過去の案件をコピーして新しい案件が作成できること
進捗の途中で、異動や退職によって離任する人がいた場合でも、承認者の変更ができること。
進捗の途中で、組織が変更になった際に、承認ルートの再設定ができること。
組織を兼務する利用者に対応できること。
承認や差し戻しをした際、次の担当者にメールが発信されること。
ユーザーとパスワードによるログイン機能があること
ユーザーの照会、登録、更新、削除が可能なこと
etc.

■非機能要件一覧の例
サービス停止後、再開までの時間:2時間未満。事前に業務調整をした上であれば2時間程度は許容できる。
バックアップデータの復旧時点:障害発生時点。
データ復旧までの時間:1営業日以内。急ぎの申請はメールや電話ベースで対応可能。
同時に利用されるユーザ数:1%程度と想定。10名。
ログの保管期間:2週間
特に応答速度が求められる操作および速度:5秒以内の表示。
通常の運用時間:朝6時〜夜22時までをシステム稼働時間とする。
バックアップの保存期間:次回バックアップ取得まで登録データ:3年
計画停止の有無:不定期に実施。実施する際は関係者の合意を得る。
移行作業完了後の3ヶ月間は初期稼働確認期間とし4ヶ月目からを本稼働とする。
ウィルス定義ファイルは自動更新とする。
etc.

==========

■工程を4つ程度に分けてしまう
1)上流工程(要件定義、基本設計、現状分析)
2)下流工程(詳細設計、実装、テスト)
3)ネットワーク設計・管理
4)プロジェクト管理

上流工程での注意
 業務モデリング、データモデリング、機能モデリングを念頭に要件定義
  要件定義するまえにPDCA調査もあり(営業を省略したいが本当に良いのかどうか)
 基本設計書は拡散思考/自由発想で作っても良い
  旧態依然になりがちな点に注意(先進、業務改善、便益を入れる)
 基本設計書には全体像、画面、運用、セキュリティは特に担当者が知りたいことを盛る
  要件と設計書の対応関係、WhatとHowは必須だがWhyもあった方が開発者も分かり易い
  行間は読まれない、さりとて資料は把握はし易い方がいい
   時間は23:59までか定時終了18:00までか等データは細かく確認
 モックがあれば解決?
 非機能要件について
  http://www.aimc.co.jp/blog/p-4283/
 テクニカルレビューは関係のない他の技術者に確認し妥当性を問う、ユーザ希望なのでとは言わない事
 
↓↓↓↓↓↓

■上流工程での成果物
-要件定義書
 要望を箇条書き
 前提となるハードやNWや業務フローを添付
-システム方式設計書(性能、信頼性、保守・運用、セキュリティを含む)
 非機能要件一覧 (https://pm-rasinban.com/kinou-hikinou にサンプル有)
 ユースケースシナリオ
 システム構成図
-画面設計(機能、アクション、遷移)
 ワイヤフレーム/モック/プロトタイプ
-データ設計(項目、ドメイン定義、制約、値域、コード仕様、ネーミング、データモデルER)
 細かな所まで詰める(値段変動、合計値の格納)
-業務プロセス設計
 業務フローと担当部署用の業務モデル
-既存システム調査報告書
-プロジェクト計画書

※業務フローと各担当部署用の業務モデル、データモデル、機能モデルがあれば納得感はある

■下流工程での成果物
-システム詳細設計書
 プログラム仕様書、DBテーブル定義、ミドルウェアパラメータ?、業務マニュアル

==========
■システム化のときに考慮すべき要素
コンピュータの五大機能:入力/出力/記憶/演算/制御(CPU/MB)→入力/出力/記憶/演算の4つでいいかも
オフィスオートメーション(紙の作業を電子化):PCやFAX等の導入で書類作成/保存/検索/送付などの事務を合理化/自動化した
 インターネット化、マーケティングオートメーション、メール化、電子マネー化、AIロボット化
 処理を早く多く自動で簡単にメンテフリーで

■モックで確認できれば早い
ヒアリング>ワイヤーフレーム>ペーパープロトタイプ>モックアップ>プロトタイプ>スクラム/WF
 ウォーターフォール的かどうかは下記2点で
  ドキュメントはどのレベルでいるか?
  区切り、レビューをどうするか?

DOAデータオリエンティッドアプローチからモックやADDに
https://qiita.com/masaki_u/items/2e3cb180313408b43dfe

■デッドロック
updateを避けinsertで設計をする
updateは一つのテーブルだけ、トランザクションで複数Updateを要求しない
単一のプロセスを通してだけupdate、例えば受注合計からのみ在庫更新する等で管理しやすくする
マスター更新は最後のものを採用するしか、楽観ロック
(A>Bとupdateする処理と、B>Aとupdateする処理があればデッドロックとなる)

■ヒストリテーブル
[B! SQL] 履歴テーブルから最新の1件を取ってくる方法 - そーだいなるらくがき帳
==========

■PMBOK(Project Management BodyOf Knowledge)
あるミッションのためにプロジェク卜を発足し、ミッション終了により解散するというプロフェッショナルな考え方がPMBOKの基本
プロジェクトの成功とは決められた期間と予算内に、目標どおりの効果をもたらす品質の良い成果物を出すこと

9つのエリア
1)総合管理(IntegrationManagement)
 プロジェクト憲章、プロジェク卜計画書
2)スコープ管理(ScopeManagement)
 どこまで作業を担当するか、成果物は何が必要か、ブラウザはChromeのみか
3)スケジュール管理(TimeManagement)
 計画と監視・管理、WBS(Work Breakdown Structure)
4)コスト管理(CostManagement)
 計画と監視・管理/トラッキングとコントロール、幾ら使っているか週報
5)品質管理(QualityManagement)
 基準を確定するため早めに確認、後工程に不良品を流さない、品質基準書(品質を上げるために隠す事も)、テスト仕様書
6)組織管理(HumanResource Management)
 体制図(開発側ユーザ側の両方)、要員の育成
7)コミュ二ケション管理(CommunicationManagement)
 議事録を取り誰がいつ、共有サイト等のツール使用も、レビュー報告書、質問管理シート
8)リスク管理(RiskManagement)
 問題点一覧に書き出す、ルールを定め遵守させる
9)調達管理(ProcurementManagement)
 外注はRFPで、現場と現物で確認、協力会社スキル管理

5つのプロセス
立ち上げ(Initia ting) → 計画(Planning)→ 実行(Executing) → 監視・管理(Controling) → 終結(Closing)

立ち上げ:PJ発足、PM選任
計画:スコープ定義、作業定義、スケジュール作成、資源管理、コスト見積、品質計画、組織計画、コミュ計画、調達計画
実行:スコープ変更、チーム構築と育成、情報の配布、進捗報告、障害報告
監視・管理:変更管理、進捗管理、コスト管理、外注管理、品質管理、リスク管理、契約管理、要員管理
終結:契約完了、PJ完了、調達終了、実績評価

最初にあるべき姿をメンバーに提示したい
PMにより総合力を高める→どうやって?
 役割とマインドセットし、飴鞭のモチベーションでは(管理だけでは駄目では、特に監視されると)
 職人でありスケジュール化/監視できない点がある事を認識し、自主でクリエイティブであれと、品質上後ろ向きにさせない
メンバーのスキルが低く作業が遅い、品質が悪く手戻りが多い、全体像が見えていない
 教育工数積み上げ、問題点はPDCAで改善アクション
 WBSをスプリントで切ってスクラムするのは?

PMBOK的資料のサンプル
http://www.shoeisha.com/book/hp/jissenpm02/27

■プロダクトオーナ
POは10年以上のベテラン推奨(幅が広く深い理解が必要=各業務に経験が必要)
POは要望を出す人でなく、第一にユーザや利害関係者からの要望を聞く人アンチパターン
プロダクトオーナーのアンチパターン | Ryuzee.com

■手法
企画(課題、べき論) > リーン開発(業務モデリング、UX、UI、データモデリング、プロジェクト管理) > 文書(要件、基本設計、詳細設計、テスト) >運用策定
開発はリーン(アジャイルでない) + PMBOK
- 計画:スコープ定義、作業定義、スケジュール作成、資源管理、コスト見積、品質計画、組織計画、コミュ二ケーション計画、調達計画
- 実行:スコープ変更、チーム構築と育成、情報の配布、進捗報告、障害報告
- 監視/管理:変更管理、進捗管理、コスト管理、品質管理、リスク管理
- 終結:PJ完了、調達終了、実績評価
※判断は客観で(ユーザ視点、セキュリティ視点)、チームでプロセス設計、コーダーが機能詳細決定
※インフラやセキュリティ: 外部IP等の設計制約
※コミュニケーション: 誰が誰と、ステークホルダ
※先に動くものを作った方が早い、改善や調整は後からで

■■設計のときに使う書籍
■業務システムのための上流工程入門(要件定義、設計)


■実践プロジェクト管理入門(PMBOK、テストのタスクはユーザの範囲だが実際は開発者が代理)


■システム設計完全ガイド(設計書を作る)


■RFP&提案書完全マニュアル


請負契約は期日までに完成品を納品することが必要
準委任なら一定の期間に労務を提供する
要件と要件を分け、何を成果物とするか、検収は誰がどう行うのか

■運用
/// BANGBOO BLOG /// - It tests you

Posted by funa : 05:38 AM | Web | Comment (0) | Trackback (0)


August 7, 2010

Shooting star

■ショットサイズ アップほど強い印象
ロングショット=状況説明
フルショット
ウエストショット
バストショット
クロースアップ
ビッグクロースアップ=気持ち

■アングル
アイレベル=目高、ふつう
ローアングル=視聴者に圧力や圧迫を与える
ハイアングル=視聴者に対象の弱さを感じさせる
俯瞰=状況説明
3Feet=アイレベルより低い90cmをハリウッドでよく使う

■位置
基本は対象を真ん中に配置
配置を変えると印象が変わる

■カメラ 撮影中はズームを使わない方が良い映像になりやすい
固定カメラ=fix撮影、安心感を与える
パン=水平首フリ、広い範囲を見せる、人は左から右を見る
ティルト=上下首フリ、希望などの印象を与える
ズームイン=見せたいものへ意識の誘導
ズームアウト=緊張を緩めたり客観性を与える
ドリー=カメラの位置が変わるのでズームより強い

■編集 大きさの違うショットを組み合わせ印象を作る
インサート=映像に他の映像を挟み込みテンポや印象を作り出す
方向=向きや動きを合わせる

■音
BGM=映像動画の持つ印象を大きく変える
効果音=画面に映っていないものを表現できる

http://www.youtube.com/watch?v=puGVyFKxyt0

Posted by funa : 03:38 AM | Web | Comment (0) | Trackback (0)


May 7, 2010

Even small things can't kill me

■フォームへHTML特殊文字を表示する

DBからのデータをtextareaに表示する時(inputへもそうだが)、「&lt;」などエスケープされたHTML特殊文字があると「<」などテキストへ解釈されて表示されてしまう。

これはフォームの動作なので仕方がないが、フォームの送信は表示したものを送るようになっているので、DBにエスケープして入れていた文字が、いつのまにか文字化けを起こしたりすることになる。

つまり、DBから「&lt;」などエスケープされたHTML文字をtextareaに表示するときは、事前に「&amp;lt;」などに変換しておく必要がある。

一度「&reg;」を「マルR」と表示したものを送信し直しても特に問題は起こらないとすると以下の4つの処理をしておけば良い事になる。

 $ent = str_replace("&amp;", "&amp;amp;", $ent);
 $ent = str_replace("&lt;", "&amp;lt;", $ent);
 $ent = str_replace("&gt;", "&amp;gt;", $ent);
 $ent = str_replace("</textarea>", "&lt;/textarea&gt;", $ent);

内容に自信はないが俺のトラブルは解消した

Posted by funa : 01:08 AM | Web | Comment (0) | Trackback (0)


April 24, 2010

Adobe Premire6.0 (Guru R.I.P.)

- スローモーション 全日本選手権モトクロス第2戦関東

なんつーワックな環境だ。プレミア6、Sanyo Xacti HD-1010とフリーウェア。糞な映像を作ってしまった。ウンコ神が降りてきた。

■Avidemux2.5
mp4の不要部分をカット ビートに合わすために頭にアタック感ある映像、後ろ長めに
Video:MJpeg (は使えた)
Filters:Color>Contrast/contrast11-brightnessNN ホワイトが多いところで合わせる
拡張子.mpgで保存

■Premire6.0
ビデオ、オーディオのトラックを増やす
フェードが無いのでビデオ2にカラーマットを置きラバーバンド(赤点)で透明度を変える
ビデオ1にはラバーバンドがない
統合したPSDはアルファチャネルを扱える、たくさんのPSDを使う?
アルファチャネルのあるアニメは、GIF、PNG、TIFFのシーケンスを使う?
ワークエリアバーでプレビュー生成の範囲を指定できる
QuickTime Mpg4で保存。
YouTubeあぷ(タイムアウトするんでセキュリティソフト切る) 1920x1080or1280x720or640x480 H.264orMpeg2があれば
------
H.264 Apple iPodビデオ大

■撮影
撮影手法の研究 照明とかピントとか構図とかかな?
映像手法の研究 ノイズとか透かしとかトランジションとかかな?
尺 アタック感とかビート合わせとかかな?

人の頭が入らないよう一番前で撮る事wwww
プレミアなら32bitのCS4か64bitのCS5以上しかない

Posted by funa : 01:42 AM | Web | Comment (0) | Trackback (0)


April 23, 2010

jQuery - write less, do more.
- Jクエネー write less, homeless

jQueryについてのまとめサイト。プラグインのリファレンスやサンプルでなく、AJAXや
メソッドチェーンでJavaScriptを書いていくやり方を覚えられるようにしたつもり。速習、入門。


///////Javascript メモ///////
var a = document.getElementById('hoge').value;
<input type="text" name="hoge" id="hoge">

name="hoge" でIEは認識するが、Firefoxでは認識しない。Firefoxでは id="hoge"も入れる


Posted by funa : 06:09 AM | Web | Comment (0) | Trackback (0)


March 11, 2010

MySQL DB Database

Ora Ora Ora Ora Oraの続きは、MySQLで。

■インデックス
カーディナリティ度が低いとは、カラムの値の種類がレコード数に比べて少ないことをあらわす。性別や血液型など
カーディナリティ度が高いとは、カラムの値の種類がレコード数に比べて多いことをあらわす。身長や体重など

インデックスの付け方 カーディナリティ(一意な値の個数)が高いものに付ける
create index index_name on table(column);
show index from テーブル名;
インデックスを使用して検索しているかの確認
explain select * from table where インデックスを持つカラム名="値";

■トランザクション
InnoDBのときトランザクション可能、Commitしない場合Rollbackされる
$query = 'START TRANSACTION';
$result = mysql_query ($query);

$query = 'INSERT INTO test_rollback (stock_no) VALUE ('あ')';
$result = mysql_query ($query);

$query = 'COMMIT';
//$result = mysql_query ($query);

■ユニオン
--Viewを作るか、Mergeテーブルを作るか
create view viewX(varx,vary,varz)
as
SELECT * FROM table1
union
select * FROM table2

CREATE TABLE total (
 a INT NOT NULL AUTO_INCREMENT,
 message CHAR(20), KEY(a)
)TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

■月間、日付について
月間のSQL betweenの方が処理は早い
reg_date >= '2010-02-01' AND reg_date < '2010-3-01'
reg_date between 2010-02-01 and 2010-02-28 23:59:59
→これだと59から00の1秒が抜ける?

reg_dateがdate型であれば
between reg_data '2010-02-01' and '2010-02-28'で十分

datetime型なら
between reg_data '2010-02-01 00:00:00' and '2010-02-28 23:59:59'で十分

MySQLの最適化
http://slashdot.jp/journal.pl?op=display&uid=4&id=26710
http://txqz.net/blog/2006/12/13/0943

MySQLマイスターに学べ! 即効クエリチューニング 記事一覧
SQL実行計画の疑問解決には「とりあえずEXPLAIN」しよう

Posted by funa : 12:25 AM | Web | Comment (0) | Trackback (0)


March 9, 2010

MySQL chara issue

■結局どう設定する?
作成時:CREATE DATABASE aaa DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
アプリ:SET NAMES utf8mb4; あるいは mysql_set_charset('utf8mb4');

DB作成時とアプリ使用時でutf8かutf8mb4で最低限統一する

utf8mb4とは文字コードの一種で、UTF8で4バイト文字を扱う事が出来るもの
絵文字や中国漢字、日本語でも特殊漢字などは4バイトが含まれている
MySQLでは5.5からこのutf8mb4に対応している
utfmb3は3バイト、MySQLは3バイトは非推奨

照合順序 は utf8_general_ci >新バージョンで変わっているので要確認
 _ci はcase insensitive、_cs は case sensitive、_bin はバイナリ
 _ci がパフォーマンスがいい、

SET NAMES より mysql_set_charsetがverによってはいい、またPDOが推奨されているが
https://techracho.bpsinc.jp/baba/2010_02_17/1133
https://www.php.net/manual/ja/function.mysql-set-charset.php

絵文字で上手くいかないと行が途切れる等があるらしい、utf8が良い?
作成時:CREATE DATABASE aaa DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
アプリ:SET NAMES utf8; あるいは mysql_set_charset('utf8');

-----------------------------------------

■DBのバックアップ(MySQLのダンプ)
バージョンでコマンドが違う場合がある、古いやつの場合↓

DB設定の文字コード、DBの運用文字コード、サーバOSの文字コード、SQLクライアントの文字コードの間で自動変換が掛かり面倒
http://kgbu.hateblo.jp/entry/20081226/1230259302

バイナリでダンプし、バイナリでインポートすると問題はない
しかしバイナリのバイトシーケンスが付与されるので気持ち悪い
Blobのような特殊なカラムがなく文字コードが統一されていればそれでやりたい(utf8)
https://ngyuki.hatenablog.com/entry/2018/06/21/220624

cp932: MS win/IBM/NEC98のSJIS、各社独自に拡張している、ほぼWin用

mysqldump -Q --host=192.168.1.2 --user=oreore --password=**** --default-character-set=binary name_db >$DBDUMP_FILE

-Qはquickオプション、通常はダンプ時に一気にテーブルデータをメモリへバッファしますがq指定で1行ごとに処理し大きなテーブルに有用
オプションはハイフン2つはフル表記で=で値を付与、ハイフン一つで短縮形でスペースを付けた上で値を付与
 --host=host_name -h host_name

???mysqldump-4.0が通らない、mysqldumpバイナリ/utf8オプションも使えない
Putty(SSH)等で入り sh db_backup.sh で実行しエラーを見る、無変換だと出せるが文字コードが混合している
 ps -aux あるいは ps aux でプロセスを見て、駄目なら殺す kill [pid]
phpmyadminで手動でエクスポート(無変換)で全テーブルを出し新DBにのせかえるしか
 →それまでは念のため通常Backupに加えて手動で時々保存すれ
 →MySQLadmin>エクスポート>テーブル選択(同じ文字コードのもの)>実行

ps -aux
kill pid

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

KEEPDAY=25
TODAY=`date +'%y%m%d'`
DBDUMP_FILE1=mysql.$TODAY
DBDUMP_FILE2=mysql_utf8.$TODAY
RMFILE1=mysql.`date -v -"$KEEPDAY"d +%y%m%d`.gz
RMFILE2=mysql_utf8.`date -v -"$KEEPDAY"d +%y%m%d`.gz

HOME_DIR=/hamehame/
BACKUP_DIR=$HOME_DIR/db_backup

cd $BACKUP_DIR

mysqldump -Q --host=192.168.1.2 \
--user=oreore --password=**** --default-character-set=binary name_db >\
$DBDUMP_FILE1

gzip $DBDUMP_FILE1 >/dev/null 2>&1

if [ $? != 0 -o ! -e $DBDUMP_FILE1 ]; then
echo "SUCCESS! MAYBE!"
rm -f $RMFILE1
exit 0
fi

Bシェルの記事も
https://www.bangboo.com/cms/blog/page_97.html

-----------------------------------------

■2010-03-09投稿
Like句ではバイナリか正規表現の検討

MySQLのLIKE文による抽出で期待通りの検索結果を出してくれなかった。
「絵コンテ」でヒットするのに「コンテ」ではヒットしなかった。

(原因)
MySQL4.0以下では日本語は単なるバイナリ列と同程度の扱いだった。MySQL4.1以上では正式に多言語に対応したようである。EUC-JPでも問題が出にくいみたいだ。

1)LIKEで検索したいフィールドに「BINARY」を付加する
 SELECT a FROM b LIKE BINARY 'ABC';
2)CREATE TABLE 時に varchar(255) BINARY と指定しておく

(簡単な回避方法)
3)バイナリが嫌ならLIKEの代わりにREGEXPを使う。これがオススメ
 SELECT a FROM b WHERE target LIKE '%~%'
 ではなくて、
 SELECT a FROM b WHERE target REGEXP '~'

他には文字コードを明記しておいた方がよいかも
CREATE TABLE `tablename` (
`id` int(11) NOT NULL auto_increment,
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-----------------------------------------

■2007-05-24投稿
HTML出力、PHP、MySQL、全部UTF-8
その時、??と文字化けが起こったぁぁ

//mySQLの文字コード
照合順序 : utf8_general_ci

//mysqlクライアント。コマンドラインからチェック
mysql> SHOW VARIABLES LIKE 'char%';
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |

//phpソースコード・文字コード設定
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

//phpソースコード・PHP内部文字コードとクエリ文字コード設定
<?php //charactor code for php internal
mb_language("uni");
mb_internal_encoding("utf-8");
mb_http_input("auto");
mb_http_output("utf-8");
// database connection
if (!mysql_connect("localhost", "id", "pswd"))
{
     die("Couldn't connect to MySQL");
}
if (!mysql_select_db("dbname"))
{
    die("Couldn't connect to the database");
}
//charactor code for query
$sql = mysql_query("SET NAMES utf8");
$result = mysql_query($sql);
?>

Set Names文のクエリ発行がミソ。PHPで発行してみる

Posted by funa : 05:02 AM | Web | Comment (0) | Trackback (0)


March 1, 2010

CSS Selectors

■* 全称セレクタ
すべての要素
h3 * em { color: red }

■ 子孫セレクタ
孫やそれ以下の要素に対しても有効
h1 em { color: blue }

<h1>携帯電話、<i>特に<em>i-mode</em></i>の爆発的な普及について</h1>
em要素 は青く表示、樹構造内で h1要素 に入れ子になっている em要素 はすべて対象

■> 子セレクタ
ある要素の直接の子供要素だけ
body > p { line-height: 1.3pt }
<body>
<ul>
  <li>
    <p>適用外</p>
  </li>
</ul>
<p>適用</p>
</body>

■+ 隣接セレクタ
兄弟関係の要素、ある要素より前に登場する要素を兄要素、後に登場する要素を弟要素
p + div { margin-top: 0.7em }

<p>段落です。</p>
<div>レイアウトコンテナです。</div>
<div>二つ目のレイアウトコンテナです。</div>
この宣言が適用されるのは、一つ目のdiv要素だけ

■[] 属性セレクタ
そこに書かれた属性を持つ要素にマッチします
p[class] { margin-top: 0.7em }
<p class="tomato>
class属性 がある p要素 にマッチします(この場合class属性値は何でも良い)。

img[align=left] { margin-left: 3em }
align属性 の値が left の img要素 にマッチ

table[class~=favorite] { margin: 0em 3em }
<table class="favorite second under">
class属性値の一覧にfavoriteという値を含むtable要素

span[lang|=en] { font-style: italic }
ハイフン(-)で区切られた属性値のリストに対応したセレクタです
<span lang="en-US">アメリカ英語</span>
<span lang="fr, en">フランス語のような英語のような。</span>

■, セレクタのグループ化
同じ宣言を持つ複数のセレクタをグループ化したもの
h1, h2, h3 { font-family: sans-serif }

■: フィルタ セレクタの状態を表す
:ルート要素とは最上位階層に位置する要素のことで、HTML文書では全体をマークアップしている がルート要素
:root p { color:#FF0000; }

:not(~)は、指定した条件と一致しない要素にスタイルシートを適用するためのセレクタだ
html:not(:target)
html:not(:only-child:only-child) p { color:#FF0000; }
html:not([lang*=""]) p { color:#FF0000; }

:first-child その要素内の初めの子のみ
:last-child その要素内の最後の子のみ
:nth-child() 任意の数字番目の子、oddなら奇数、evenなら偶数番目など
:nth-last-child()

:before その要素の前に何かを追加する
:after その要素の後ろに何かを追加する

.clearfix:after{
content:".";
display:block;
height:0;
clear:both;
visibility:hidden;
} /*IE7以外のモダンブラウザ向け*/

■. クラスセレクタ
class属性の値がwarningであるdiv要素にマッチ
DIV.warning { color:#FF0000; }

■# IDセレクタ
一意(ID型)属性の値がmyidであるp要素にマッチ
p#myid { color:#FF0000; }

======================

■疑似要素
セレクターに付与し要素の特定の部分にスタイル付けができる、CSS2文法では:だったがCSS3で::になったものも
疑似要素の例 (::first-letter, ::first-line, ::before, ::after etc.)
疑似クラスの例 (:link, :hover, :visited, ,:active, nth-child(n), nth-of-type(n), :not() etc.)
a::after {
  content: "→";
}

Posted by funa : 01:29 AM | Web | Comment (0) | Trackback (0)


November 16, 2009

Ora Ora Ora Ora Ora

おっすオラ忘れ易いルール、無駄無駄無駄無駄無駄無駄ッ

■DML
DB製品毎のnullの扱いを事前に調べる(word != ‘検索値'やword = nullではnullにヒットしない、is not nullを使う等)

null値はもっとも小さな値、or大きな値(nullが含まれるかnullの件数を先に確認しておく、下に例を載せた)
集計関数はNULLを無視する(下に例を載せた)

文字列は'で囲む
取得したいカラムは集計関数に使われるカラムを除いて全てGroupBy句に入れる
集計関数の条件はhaving句を使用する(where句は元のデータに対するもの)、having句には集計関数が入る(下に例を載せた)
SQLワイルドカード:複数文字%,1文字_
WINワイルドカード:複数文字*,1文字?
エスケープ文字はescape句で設定。like句の後ろにつく。escape '\'
日付と文字列の変換が必要To_char関数とTo_date関数を使用する
to_char(column,'yyyy/mm/dd hh24:mi:ss')
to_date('2009/02/21','yyyy/mm/dd')
横幅を大きくするset line 150
縦を大きくするset pages 30
unionはdistinctが掛かる、全取得はunion all
inner join onは両方のテーブルにあるものだけ、どちらかだけにあるのは無くなるイメージ
left (outer) join onは左側のテーブルにしかないものも表示、左に右の該当部をくっつけるイメージ
right (outer) join onは右側のテーブルにしかないものも表示、右に左の該当部をくっつけるイメージ
full outer join onは全ての行を表示

trancateは高速だがロールバックできない、deleteはロールバックできる、論理削除がindexメンテコスト低で良い
多対多のSQLが含まれないか確認する(下に例を載せた)

■テーブル結合4種
1対1、1対多の結合を行う
1対多でも行数が増えるが、多対多は全組合せになり行数が比例関数的に増えてしまう
多対多になるのはテーブル設計が悪いのでは?
1)inner join - on () 両方あるものを表示、欠けがでる
2)left outer join - on () どちらかは欠けがなく表示
3)right outer join - on ()  どちらかは欠けがなく表示
4)full outer join - on ()  欠けがなく表示

select URIID,NAME,UKYAKUID from URIAGE left outer join TORIHIKI
 on (URIAGE.UKYAKUID = TORIHIKI.ID)
select URIID,NAME,UKYAKUID from TORIHIKI right outer join URIAGE
 on (URIAGE.UKYAKUID = TORIHIKI.ID)
select URIID,NAME,UKYAKUID from TORIHIKI full outer join URIAGE
 on (URIAGE.UKYAKUID = TORIHIKI.ID)
select 伝票番号,行番号,処理日,商品名,担当者名,顧客名,数量 from 売上データ
 left outer join 商品マスタ on 売上データ.商品ID = 商品マスタ.商品ID
 left outer join 担当者マスタ on 売上データ.担当者ID = 担当者マスタ.担当者ID
 left outer join 顧客マスタ on 売上データ.顧客ID = 顧客マスタ.顧客ID
 order by 伝票番号,行番号

■なおjoin on句 と where句での結合の違い
1)select * from A, B where A.a = B.a and A.c = 3;
2)select * from A inner join B on A.a = B.a where A.c = 3;
両者は同じ結果、前者の方が古くからある構文,後者が新しい構文。だがOuter joinは下記にある通り違う
https://okwave.jp/qa/q8090979.html

■WHEREとJOIN ONで条件を指定した場合の違い
SELECT * FROM movies LEFT OUTER JOIN counts ON counts.movie_id = movies.id WHERE counts.date_at = '2012-12-16';
 WHERE句はJOINが終わってから評価される→Outer joinでも12/16でない映画が含まれずLEFTが欠ける
この問題の解決にはWHERE句に条件を指定するのでなくJOIN ONの追加条件として指定する
SELECT * FROM movies LEFT OUTER JOIN counts ON counts.movie_id = movies.id AND counts.date_at = '2012-12-16';
 Outer joinしLEFTの全映画が出力したいので、結合前に12/16以外のカウントを外した上で結合させると逆にLEFT側は全部でる(RIGHTの条件で絞った上でLEFT OUTER JOINだとRIGHTがNULLでもLEFTが出る)
http://hakutoitoi.hatenablog.com/entry/2012/12/17/005208

■多対多、1対多の行数
社員と職域、社員と手当、それぞれ結合しても多の行数(1x多)になる
こんな設計や操作はするなという事(多x多の行数になる、多対多の結合は行わないこと)
-- データ挿入:社員
INSERT INTO x_employee (no,name) VALUES (1, '田中');
INSERT INTO x_employee (no,name) VALUES (2, '鈴木');
INSERT INTO x_employee (no,name) VALUES (3, '佐藤');
-- データ挿入:職域(兼任が発生)
INSERT INTO x_joblevel (no,res) VALUES (1, '部長');
INSERT INTO x_joblevel (no,res) VALUES (1, '課長');
INSERT INTO x_joblevel (no,res) VALUES (2, '平');
-- データ挿入:手当(一人に幾つか付く)
INSERT INTO x_compensation (no,allow) VALUES (1, '住宅');
INSERT INTO x_compensation (no,allow) VALUES (1, '交通');
INSERT INTO x_compensation (no,allow) VALUES (2, '住宅');
-- 1対多(田中が兼任のため田中分が2行、鈴木1行で都合3行、1対多だとまだ兼任と理解ができる)
select * from x_employee
 inner join x_joblevel on x_employee.no = x_joblevel.no
-- 多対多(田中兼任2行x田中手当2行の小計4行、鈴木の1行で都合5行、田中だけで4行でるとマトリックスの意味が不明になる)
select * from x_employee
 inner join x_joblevel on x_employee.no = x_joblevel.no
 inner join x_compensation on x_employee.no = x_compensation.no

■Group by/having/where
取得したいカラムは集計関数に使われるカラムを除いて全てGroupBy句に入れるの例
select distinct boss from fun_test_data
select department, avg(salary) from fun_test_data group by department
select boss, avg(salary) from fun_test_data group by boss
select department, boss, avg(salary) from fun_test_data group by department, boss

集計関数の条件はhaving句を使用する(where句は元のデータに対するもの)、having句には集計関数が入る例
select department, count(department), avg(salary) from fun_test_data where department!="営業" group by department;
select department, count(department), avg(salary) from fun_test_data where department!="営業" group by department having avg(salary) > 45;
※moreにデータをDDLを置いておくので操作して感じる

集計関数にはsum() count() avg() stddev()標準偏差 variance()分散etc..がある

nullを無視するので、3件が100, null, 200のとき平均は150となる、nullを0にする事
SELECT AVG(NVL(SURYO,0)) AS 平均, COUNT(NVL(SURYO,0)) AS 件数 FROM TEST1

data2にnullがありカウントしようとするがnullはカウントされず1行目はダメ、件数はkeyをカウントせよ
select COUNT(DATA2) from EXAMPLE_TABLE where DATA2 is NULL
select COUNT(ID) from EXAMPLE_TABLE where DATA2 is NULL

※SQLはバグかどうか分からず失敗かどうか分かりにくい→計算式を書いてからSQLを書く
集計値の集計を行う際には集計順序に注意せよ | 実践から学ぶ分析の落とし穴 - GiXo Ltd.

■サブクエリ(副問い合わせ)
どこでもOK、any() in() some() exists() not exists()等がある、mysqlにはminus() except()はない

/// where条件が1件
SELECT 受注番号 FROM 受注表 WHERE 商品コード = (SELECT 商品コード FROM 商品表 WHERE 商品名 = 'JUICE');
/// where条件が複数
SELECT 受注番号 FROM 受注表 WHERE 商品コード IN (SELECT 商品コード FROM 商品表 WHERE 単価 = 400);
/// havingに
SELECT 顧客コード,COUNT(DISTINCT 受注番号) FROM 受注表 GROUP BY 顧客コード HAVING 受注個数 < (SELECT MIN(受注個数) FROM 受注表 WHERE 顧客コード = '002');
/// fromに
SELECT MAX(AVG_J) AS MAX_AVG FROM (SELECT AVG(受注個数) AS AVG_J FROM 受注表 GROUP BY 顧客コード) ;
/// selectに(出力表のカラム数は1個だけで、これが変わる等はできないかと)
SELECT 顧客コード,AVG(受注個数), (SELECT AVG(受注個数) FROM 受注表) FROM 受注表 GROUP BY 顧客コード;

selectサブクエリにカラムを一つづつ足せば複数も可だが
select name, res,
 (select allow from x_compensation where x_compensation.no = x_employee.no limit 0, 1),
 (select allow from x_compensation where x_compensation.no = x_employee.no limit 1, 1)
 from x_employee inner join x_joblevel on x_employee.no = x_joblevel.no inner join x_compensation on x_employee.no = x_compensation.no

/// 相関サブクエリ(出力表のカラム数が変わる等はできないかと)
メインクエリの行ごとにサブクエリを実行、結合をサブに記入している、違う書き方ができるかも知れないがサブからでなくメインから考えている感じ
例1)
SELECT * FROM 商品表 AA WHERE '20010401' IN  (SELECT 納品日 FROM 受注表 BB WHERE AA.商品コード = BB.商品コード);
例2)
SELECT SUM(受注個数),納品日 FROM 受注表 PP GROUP BY 納品日 HAVING SUM(受注個数) > (SELECT 150 + MAX(受注個数) FROM 受注表 QQ WHERE PP.納品日 = QQ.納品日);

■Union
UNION句でマージする複数のSELECT文は、(1)SELECT句のカラム数が同じこと(2)カラムのデータ型が同じか、変換可能であること
select shit from ass union all select kuso from ketsu

■SQLはカラム数の増加数で構成考える?
left outer joinはカラム数がカラム数の合計から共通のjoin onのカラム数を引いた数(行数は同じ)
 full outer join はカラム数がカラム数の合計から共通のjoin onのカラム数を引いた数(行数はleftの要素数にrightの要素数を合計したもの)
unionは重複を除外し表を足し合わせるため行数が両表の合計行数(カラム数は合致必要でカラム数は変わらない)
unian allは重複を除外せず表を足し合わせるため行数が両表の合計行数(カラム数は合致必要でカラム数は変わらない)
cross joinはカラム数が両表のカラム数の合計、行数は両表の行数の掛け算
 再帰的にSQL処理はcross joinし条件を付けるか?
  標準SQLのFrom句のカンマはcross joinとなる
with句は副問い合わせを見やすくしたもの
distinctで(組み合わせで)一意になる行のみにし重複を省く
UNION とUNION ALLの違い - Qiita
CROSS JOIN (クロス結合)を使ってデータを取得する - JOIN (結合)を使いこなそう - SQL Server 入門 (sql55.com)
SQLのDISTINCTとは?(OracleやMySQLで使用する方法) | IT職種コラム (it-kyujin.jp)

■テーブル設計、制約
CONSTRAINT pk_uriage PRIMARY KEY (伝票番号, 行番号),
CONSTRAINT fk_shohin FOREIGN KEY (商品ID) REFERENCES 商品マスタ(商品ID)
CONSTRAINT ck_gender CHECK (性別=0 OR 性別=1)
制約は列に指定しても、うしろで指定してもどちらでもよい
CONSTRAINTのキー名を省略するとオラクルが勝手につける
主キーにはNULLは入らない
ユニークキーにはNULLを入れてもよい
NOT NULLの未入力はエラー

■シーケンス
シーケンスはオブジェクトとして表とは別に作成する
デクリメントはできないので修正はDROPして作成し直す
DUALはダミー表
nextvalはインクリした後の値
currvalは現在地
create sequence testseq
select testseq.nextval from dual
select testseq.currval from dual
insert into URIAGE (URIID,URIDATE,UKYAKUID) values (testseq.nextval,'09-11-16','101')
drop sequence testseq

■ビュー
頻繁に行われるような問い合わせをスキーマに格納しておく、パフォーマンスが上がる場合がある
集約等をしなければパフォーマンスには問題がない。次を使うとパフォーマンスが落ちる。OLAP 関数(RANK, DENSE_RANK, ROW_NUMBER 等)、集約関数(AVG, COUNT, SUM, MIN, MAX)、集合演算子( UNION, INTERSECT, EXCEPT 等 )
ビューは検索だけでなく、データの追加、更新、削除も行える※使用しない方が良い?
create view 売上ビュー as
 select 伝票番号,行番号,処理日,商品名,担当者名,顧客名,数量 from 売上データ
 left outer join 商品マスタ on 売上データ.商品ID = 商品マスタ.商品ID
 left outer join 担当者マスタ on 売上データ.担当者ID = 担当者マスタ.担当者ID
 left outer join 顧客マスタ on 売上データ.顧客ID = 顧客マスタ.顧客ID
 order by 伝票番号,行番号
select * from 売上ビュー

■用語
concat()…CONCATENATE 文字連結
coalesce()…コーレス、合体する、与えられた引数のうちNULLでない最初の引数を返す
LPAD() RPAD()…文字の右詰左詰め
OLAP…OnLine Analytical Processing=分析、キューブ

■インデックス
1)インデックスが効かない
関数 where datediff(now(),mod_date)>180
式 where col1 / 2 = 0
否定構文 where col1 != 3
Like検索(前方一致除く) where col1 like '%string%'とかwhere col1 like '%string'とか
2)複合インデックスでは指定順が重要
index a
 create index idxA1 on tbl (col1);
 create index idxA2 on tbl (col2);
 -> where col1 = x > idxA1が使用される
 -> where col2 = x > idxA2が使用される
 -> where col1 = x AND col2 = x > idxA1か2のどちらかが使用される
index b
 create index idxB1 on tbl (col1, col2);
 -> where col1 = x > idxB1が使用される
 -> where col2 = x > インデックスは使用されない
 -> where col1 = x AND col2 = x > idxB1が使用される,indexA1,A2より高速
index c
 create index idxC1 on tbl (col2, col1);
 -> where col1 = x > インデックスは使用されない
 -> where col2 = x > idxC1が使用される
 -> where col1 = x AND col2 = x > idxC1が使用される,indexA1,A2より高速

■RFM(recency frequenctry monetary)
SELECT name, MAX(date), MIN(date) FROM x_employee RIGHT JOIN x_bill ON x_employee.no = x_bill.user_no GROUP BY name ORDER BY MAX(date) DESC
SELECT name, count(x_bill.no) FROM x_employee RIGHT JOIN x_bill ON x_employee.no = x_bill.user_no GROUP BY name ORDER BY count(date) DESC
SELECT name, sum(total_bill) FROM x_employee RIGHT JOIN x_bill ON x_employee.no = x_bill.user_no  GROUP BY name ORDER BY sum(total_bill)  DESC
SELECT name, SUM(price * unit) FROM x_employee RIGHT JOIN x_bill ON x_employee.no = x_bill.user_no RIGHT JOIN x_purchase ON x_bill.no = x_purchase.p_no GROUP BY name ORDER BY SUM(price * unit) DESC

SELECT name, MAX(date), count(DISTINCT x_bill.no), SUM(price * unit) FROM x_employee RIGHT JOIN x_bill ON x_employee.no = x_bill.user_no RIGHT JOIN x_purchase ON x_bill.no = x_purchase.p_no GROUP BY name ORDER BY SUM(price * unit) DESC
 ※購入頻度は多対多で重複が出るのでカウントはdistinct primaryKeyで重複を含めない

↓順位を点数化のため、MySQLにはRownumがなく変数を使いシンプルな表でまず作った
SET @rownum_recent=0; 
SELECT @rownum_recent:=@rownum_recent+1 as rank_recent, no, name, recent  from
 (SELECT x_employee.no, name, MAX(date) as recent FROM x_employee RIGHT JOIN x_bill ON x_employee.no = x_bill.user_no GROUP BY name ORDER BY MAX(date) DESC) as t1

SET @rownum_frequent=0; 
SELECT @rownum_frequent:=@rownum_frequent+1 as rank_frequent, no, name, frequent from
 (SELECT x_employee.no, name, count(x_bill.no) as frequent FROM x_employee RIGHT JOIN x_bill ON x_employee.no = x_bill.user_no GROUP BY name ORDER BY count(date) DESC) as t2

SET @rownum_money=0; 
SELECT @rownum_money:=@rownum_money+1 as rank_money, no, name, money from
 (SELECT x_employee.no, name, SUM(price * unit) as money FROM x_employee RIGHT JOIN x_bill ON x_employee.no = x_bill.user_no RIGHT JOIN x_purchase ON x_bill.no = x_purchase.p_no GROUP BY name ORDER BY SUM(price * unit) DESC) as t3

↓まとめる(user_noで結合した、別名を付ける計算カラムよりどの元の表かが重要かもLeftかRight joinかで)

SET @rownum_rank=0;
SET @rownum_recent=0;
SET @rownum_frequent=0;
SET @rownum_money=0;

SELECT @rownum_rank:=@rownum_rank+1 as rank, rank_recent+rank_frequent+rank_money as least_score_wins, t1_r.no as user_no, t1_r.name, recent, frequent, money, rank_recent, rank_frequent, rank_money
FROM (
   SELECT @rownum_recent:=@rownum_recent+1 as rank_recent, t1.no, t1.name, recent
   FROM (SELECT x_employee.no, x_employee.name, MAX(date) as recent FROM x_employee RIGHT JOIN x_bill ON x_employee.no = x_bill.user_no RIGHT JOIN x_purchase ON x_bill.no = x_purchase.p_no GROUP BY x_employee.no, x_employee.name ORDER BY MAX(date) DESC) as t1
) as t1_r
LEFT OUTER JOIN (
   SELECT @rownum_frequent:=@rownum_frequent+1 as rank_frequent, t2.user_no, t2.name, frequent
   FROM (SELECT x_bill.user_no, x_employee.name, count(distinct x_bill.no) as frequent FROM x_employee RIGHT JOIN x_bill ON x_employee.no = x_bill.user_no RIGHT JOIN x_purchase ON x_bill.no = x_purchase.p_no GROUP BY x_bill.user_no, x_employee.name ORDER BY count(distinct x_bill.no) DESC) as t2
) as t2_f
ON t1_r.no = t2_f.user_no
LEFT OUTER JOIN (
   SELECT @rownum_money:=@rownum_money+1 as rank_money, t3.no, t3.name, money
   FROM (SELECT x_employee.no, x_employee.name, SUM(price * unit) as money FROM x_employee RIGHT JOIN x_bill ON x_employee.no = x_bill.user_no RIGHT JOIN x_purchase ON x_bill.no = x_purchase.p_no GROUP BY x_employee.no, x_employee.name ORDER BY SUM(price * unit) DESC) as t3
) as t3_m
ON t2_f.user_no = t3_m.no
ORDER BY least_score_wins asc

■NULLの件数を事前に数えておく
SELECT *
 FROM (SELECT 'value', count(COALESCE(value,0))  FROM bangboo_data.x_data WHERE value IS NULL)
 union all
 (SELECT 'value2', count(COALESCE(value2,0))  FROM bangboo_data.x_data WHERE value2 IS NULL)
 union all
 (SELECT 'v_no_null', count(COALESCE(v_no_null,0))  FROM bangboo_data.x_data WHERE v_no_null IS NULL)
↑が安全策

SELECT count_null_1, count_null_2
 FROM (SELECT value, count(COALESCE(value,'')) as count_null_1 FROM x_data WHERE value IS NULL GROUP BY value) as t1,
 (SELECT value2, count(COALESCE(value2,''))  as count_null_2 FROM x_data WHERE value2 IS NULL GROUP BY value2) as t2
 ※From A, B, C でクロス結合となり全組み合わせがでる、1行ずつならOKだが、、
 ※SQLはカウント0件をグルーピングできない、表示自体存在しないことになるから、↑は少々危険で↓で
SELECT count_null_1, count_null_2
 FROM (SELECT count(COALESCE(value,'')) as count_null_1 FROM x_data WHERE value IS NULL) as t1,
 (SELECT count(COALESCE(value2,''))  as count_null_2 FROM x_data WHERE value2 IS NULL) as t2,
 (SELECT count(COALESCE(v_no_null,0))  as count_null_3 FROM x_data WHERE v_no_null IS NULL) as t3

■SQL一覧
 https://qiita.com/tatsuya4150/items/69c2c9d318e5b93e6ccd
UPDATE テーブル名 SET カラム名 = 値, カラム名 = 値  WHERE id = 1
INSERT INTO テーブル名 VALUES ('1')DELETE FROM テーブル名 WHERE 条件
intersectは重複するもの SELECT name FROM ユーザー1 INTERSECT SELECT name FROM ユーザー2
 ※unionは和集合、exceptは差集合、intersectは積集合


Posted by funa : 06:54 PM | Web | Comment (0) | Trackback (0)


Navi: <  1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14  >
PhotoGallery


TWITTER
Search

Mobile
QR for cellphone  QR for smart phone
For mobile click here
For smart phone click here
Popular Page
#1Web
#2Hiace 200
#3Gadget
#4The beginning of CSSレイアウト
#5Column
#6Web font test
#7Ora Ora Ora Ora Ora
#8Wifi cam
#9みたらし団子
#10Arcade Controller
#11G Suite
#12PC SPEC 2012.8
#13Javascript
#14REMIX DTM DAW - Acid
#15RSS Radio
#16Optimost
#17通話SIM
#18Attachment
#19Summer time blues
#20Enigma
#21Git
#22Warning!! Page Expired.
#23Speaker
#24Darwinian Theory Of Evolution
#25AV首相
#26htaccess mod_rewite
#27/// BANGBOO BLOG /// From 2016-01-01 To 2016-01-31
#28竹書房
#29F☆ck CSS
#30Automobile Inspection
#31No ID
#32Win7 / Win10 Insco
#33Speaker
#34Arcade Controller
#35Agile
#36G Suite
#37Personal Information Privacy Act
#38Europe
#39Warning!! Page Expired.
#40GoogleMap Moblile
#41CSS Selectors
#42MySQL DB Database
#43Ant
#44☆od damnit
#45Teeth Teeth
#46Itinerary with a eurail pass
#47PHP Developer
#48Affiliate
#49/// BANGBOO BLOG /// From 2019-01-01 To 2019-01-31
#50/// BANGBOO BLOG /// From 2019-09-01 To 2019-09-30
#51/// BANGBOO BLOG /// On 2020-03-01
#52/// BANGBOO BLOG /// On 2020-04-01
#53Windows env tips
#54恐慌からの脱出方法
#55MARUTAI
#56A Rainbow Between Clouds‏
#57ER
#58PDF in cellphone with microSD
#59DJ
#60ICOCA
#61Departures
#62Update your home page
#63CSS Grid
#64恐慌からの脱出方法
#65ハチロクカフェ
#66/// BANGBOO BLOG /// On 2016-03-31
#67/// BANGBOO BLOG /// From 2017-02-01 To 2017-02-28
#68/// BANGBOO BLOG /// From 2019-07-01 To 2019-07-31
#69/// BANGBOO BLOG /// From 2019-10-01 To 2019-10-31
#70/// BANGBOO BLOG /// On 2020-01-21
#71Bike
#72Where Hiphop lives!!
#73The team that always wins
#74Tora Tora Tora
#75Blog Ping
#76無料ストレージ
#77jQuery - write less, do more.
#78Adobe Premire6.0 (Guru R.I.P.)
#79PC SPEC 2007.7
#80Google Sitemap
#81Information privacy & antispam law
#82Wifi security camera with solar panel & small battery
#83Hope get back to normal
#84Vice versa
#85ハイエースのメンテ
#86Camoufla
#87α7Ⅱ
#88Jack up Hiace
#89Fucking tire
#90Big D
#914 Pole Plug
#925-year-old shit
#93Emancipation Proclamation
#94Windows env tips
#95Meritocracy
#96Focus zone
#97Raspberry Pi
#98Mind Control
#99Interview
#100Branding Excellent
Category
Recent Entry
Trackback
Comment
Archive
<     December 2024     >
Sun Mon Tue Wed Thi Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Link