MySQL

[Ruby]MySQLからデータ取得

MySQLからデータ取得

サンプル

#!/usr/bin/ruby-1.9.3
# coding: utf-8
require 'json'
require 'mysql'

puts "Content-type: application/json\n\n"

connection = Mysql.connect('host','user','password','db name')
connection.query("set character set utf8") #文字化けするとき

columns=["ID","post_title","post_date"]
result = connection.query("SELECT "+columns.join(",")+" FROM wp_posts WHERE post_status='publish' ORDER BY ID DESC LIMIT 5")
connection.close

results=Array.new
result.each {|record|
    w = {}
    record.each_with_index{|val,i|
        key = columns[i]
        w[key.force_encoding("utf-8")]=val.force_encoding("utf-8") #文字化けするときforce_encoding
    }
    results.push(w)
}
puts JSON.generate({'time'=>Time.now.strftime("%Y-%m-%d %H:%M:%S"), 'data'=>results})

[MySQL]MySQLの文字コードの設定を確認する

MySQLの文字コードの設定を確認する

クエリ

SHOW VARIABLES LIKE 'character_set%'

結果

Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

[MySQL]ビット演算#1

ビット演算#1
type(INTEGER)を4ビット右シフトして右端が1であるレコードのidとtypeを取得する。

SELECT id,type FROM target_table_name WHERE type >> 4 & 1 = 1;

[PHP]INSERT文を作る

INSERT文を作る

echo getInsertQueryByKey('system_table', array('name','gender'), array( array('jeff','male'), array('pola','female') ) );

function getInsertQueryByKey($tableName,$columns,$datas){

	//SQLite古いバージョン
	$w=array();

	$column = implode(',', $columns);
	$query="INSERT INTO {$tableName} ({$column}) SELECT ";
	$tmp=array();
	foreach ($columns as $index => $columnName) {
		$tmp[] = "'". $datas[0][$index] . "'" . ' AS ' . $columnName;
	}
	$query .= implode(', ', $tmp);
	$w[]=$query;

	foreach ($datas as $index => $data) {
		if($index<1)continue;
		$tmp=array();
		foreach ($columns as $index2 => $columnName) {
			$tmp[]=$data[$index2];
		}
		$w[]="'".implode("', '", $tmp)."'";
	}

	return implode(' UNION ALL SELECT ', $w).';';

	/* MySQL or SQLite(バージョン 3.7.11以降)
	$queryValues=array();
	foreach ($datas as $index => $value) {
		$values=array();
		foreach ($value as $index2 => $value2) {
			$values[]="'".$value2."'";
		}
		$queryValues[]='('.implode(',', $values).')';
	}

	$column=implode(',', $columns);
	$value=implode(',', $queryValues);
	$sql="INSERT INTO {$tableName} ({$column}) VALUES {$value};";
	return $sql;
	*/
}

[MySQL,SQLite]INSERTで複数のデータを挿入

INSERTで複数のデータを挿入

INSERT INTO system_table (name,gender) SELECT 'jeff' AS name, 'male' AS gender UNION ALL SELECT 'pola', 'female';

MySQL or SQLite(バージョン 3.7.11以降)

INSERT INTO system_table (name,gender) VALUES ('jeff','male'),('pola','female');

[PHP x MySQL]MySQLを使う

MySQLを使う

$default = array(
	'host' => 'database host',
	'user' => 'user ID',
	'password' => 'password',
	'database' => 'database name',
	'encoding' => 'utf8',
);
$link = mysql_connect($default['host'], $default['user'], $default['password']);

if (!$link) {
    echo '接続失敗です。'.mysql_error();
    die();
}
echo "接続成功<br/><br/>";

$db_selected = mysql_select_db($default['database'], $link);
if (!$db_selected){
    echo 'データベース選択失敗です。'.mysql_error();
    die();
}
echo "データベース選択成功<br/><br/>";

mysql_set_charset($default['encoding']);
$result = mysql_query('SELECT * FROM test00');
if (!$result) {
    echo 'クエリーが失敗しました。'.mysql_error();
    die();
}

$tmp=array();
while ($row = mysql_fetch_assoc($result)) {
    $tmp[]=$row;
}
var_dump($tmp);

$close_flag = mysql_close($link);
echo '切断に'.( ($close_flag)?'成功':'失敗' ).'しました。';

[MySQL]2テーブルの差分取得

同定義のテーブルA、テーブルBにおいて
テーブルAにあり、テーブルBに無いデータのidを取得する。

SELECT id FROM テーブルA WHERE NOT EXISTS (SELECT id FROM テーブルB WHERE テーブルB.id = テーブルA.id) ORDER BY id