私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレMySQL 総合 Part13
mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 : ☆
レスフィルター : (試験中)
とりあえず、
SELECT cast('hoge' as signed);
を実行してみればいいと思うよ。
SELECT cast('hoge' as signed);
を実行してみればいいと思うよ。
その場をしのぎたいだけなら、idを文字列にキャストして比較すればいいよ。
SELECT * FROM users WHERE cast(id as char(11)) = 'うんこ';
でもこれだと、idにインデックスが張ってあっても
インデックスが使われないかもしれない。
というか、列にindexとidがあるのがそもそもおかしい。
普通、indexなんて名前付けずに、idにして、
idはnameとかuserとかにして、varcharとかcharにするのが普通じゃないかな。
CREATE TABLE Users (
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT
, user_name char(11) NOT NULL DEFAULT '0'
, pw varchar(40) NOT NULL
, PRIMARY KEY (id)
);
SELECT * FROM users WHERE cast(id as char(11)) = 'うんこ';
でもこれだと、idにインデックスが張ってあっても
インデックスが使われないかもしれない。
というか、列にindexとidがあるのがそもそもおかしい。
普通、indexなんて名前付けずに、idにして、
idはnameとかuserとかにして、varcharとかcharにするのが普通じゃないかな。
CREATE TABLE Users (
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT
, user_name char(11) NOT NULL DEFAULT '0'
, pw varchar(40) NOT NULL
, PRIMARY KEY (id)
);
>>451
数値に対して文字列で比較しても、そもそも型自体が異なるので絶対合致しないもの、と思っておりました。
しかし何故か0のものが抽出されてしまった為、疑問に思いました。
>>452
実行してみました。0が返ってきました。
要するに、数値型のカラムに対して文字列で比較しようとすると、
mysql内部で自動的に cast('hoge' as signed) のような形に変換され、
その結果返ってきた0で抽出条件を掛けてしまう、という事でしょうか?
>>453
ありがとうございます。
期待した通りの結果が返ってきました。
>indexとidがあるのがそもそもおかしい
こちら当方も感じました(他の方が作ったものの修正をしています)。
あと、CREATE TABLE で主キーに UNSIGNED を付ける辺り、なるほどと思いました。
大変勉強になりました、ありがとうございます。
数値に対して文字列で比較しても、そもそも型自体が異なるので絶対合致しないもの、と思っておりました。
しかし何故か0のものが抽出されてしまった為、疑問に思いました。
>>452
実行してみました。0が返ってきました。
要するに、数値型のカラムに対して文字列で比較しようとすると、
mysql内部で自動的に cast('hoge' as signed) のような形に変換され、
その結果返ってきた0で抽出条件を掛けてしまう、という事でしょうか?
>>453
ありがとうございます。
期待した通りの結果が返ってきました。
>indexとidがあるのがそもそもおかしい
こちら当方も感じました(他の方が作ったものの修正をしています)。
あと、CREATE TABLE で主キーに UNSIGNED を付ける辺り、なるほどと思いました。
大変勉強になりました、ありがとうございます。
MySQLのコマンドラインツール(mysql.exe)のログを取る方法はありませんか?
一度に大量のSQLスクリプトを実行するとログが流れてしまって、
エラーが出ていても気づかないということがあるんです。
一度に大量のSQLスクリプトを実行するとログが流れてしまって、
エラーが出ていても気づかないということがあるんです。
>要するに、数値型のカラムに対して文字列で比較しようとすると、
>mysql内部で自動的に cast('hoge' as signed) のような形に変換され、
>その結果返ってきた0で抽出条件を掛けてしまう、という事でしょうか?
型が違うと、いちど失敗してから変換が発生するから、
明示的に変換するのに比べてオーバーヘッドが発生することだけ頭の片隅にでも置いておけば、
その理解で大体OK
>mysql内部で自動的に cast('hoge' as signed) のような形に変換され、
>その結果返ってきた0で抽出条件を掛けてしまう、という事でしょうか?
型が違うと、いちど失敗してから変換が発生するから、
明示的に変換するのに比べてオーバーヘッドが発生することだけ頭の片隅にでも置いておけば、
その理解で大体OK
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ
あなたが使用している PHP, MySQL のライブラリ(libmysql.dll, libmysqlclient)
の標準キャラクターセットは何かご存じですか?
とありますが、標準キャラクターセットを調べる方法はあるのでしょうか?
あなたが使用している PHP, MySQL のライブラリ(libmysql.dll, libmysqlclient)
の標準キャラクターセットは何かご存じですか?
とありますが、標準キャラクターセットを調べる方法はあるのでしょうか?
正規表現の置き換えはできますでしょうか?
イメージとしては以下のような感じです。
hogeテーブル(id=1)のnameに'A([0-9]+)'があった場合、
(SELECT rep FROM rep_table WHERE id=$1)
と置き換える
A1の場合だと(SELECT rep FROM rep_table WHERE id=A1)
よろしくお願いします。
イメージとしては以下のような感じです。
hogeテーブル(id=1)のnameに'A([0-9]+)'があった場合、
(SELECT rep FROM rep_table WHERE id=$1)
と置き換える
A1の場合だと(SELECT rep FROM rep_table WHERE id=A1)
よろしくお願いします。
正規表現使いたいときも確かにあるが、
その例の場合単に第一正規化されてないだけじゃ?
idを分割すればそういうのも簡単に実現できるだろ。
SELECT rep FROM rep_table R
WHERE EXISTS (
SELECT * FROM hoge H WHERE H.kind = 'A' AND H.id = R.id)
AND R.kind = 'A';
みたいな。
その例の場合単に第一正規化されてないだけじゃ?
idを分割すればそういうのも簡単に実現できるだろ。
SELECT rep FROM rep_table R
WHERE EXISTS (
SELECT * FROM hoge H WHERE H.kind = 'A' AND H.id = R.id)
AND R.kind = 'A';
みたいな。
>>461さん
レスありがとうございます。
hoge.nameにはA1A3...見たいな感じでA([0-9]+)に複数マッチする可能性があります。(1つもマッチしない場合もあります)
それらすべてを(SELECT rep FROM rep_table WHERE id=$1)の形でとりたいのです。
現状ではプログラム側で、マッチした場合、そのつどSELECTで取得しています。
preg_replace_callback('/A([0-9]+)/','_preg_rep',$query);
function _preg_rep($matches) {
$sql =
"SELECT rep FROM rep_table WHERE id='$matches[1]'";
..
}
わかりづらい質問ですみませんがよろしくお願いします。
レスありがとうございます。
hoge.nameにはA1A3...見たいな感じでA([0-9]+)に複数マッチする可能性があります。(1つもマッチしない場合もあります)
それらすべてを(SELECT rep FROM rep_table WHERE id=$1)の形でとりたいのです。
現状ではプログラム側で、マッチした場合、そのつどSELECTで取得しています。
preg_replace_callback('/A([0-9]+)/','_preg_rep',$query);
function _preg_rep($matches) {
$sql =
"SELECT rep FROM rep_table WHERE id='$matches[1]'";
..
}
わかりづらい質問ですみませんがよろしくお願いします。
意図が伝わらなかったかな。
要は、テーブル定義(というか設計)見直せば?ってこと。
正規表現を使わなくても、テーブルさえちゃんとしてれば
461で示したSQLで実現できるよね?
もし変更が不可能だとしても、
idから部分文字列を切り出すとかすれば十分実現可能。
要は、テーブル定義(というか設計)見直せば?ってこと。
正規表現を使わなくても、テーブルさえちゃんとしてれば
461で示したSQLで実現できるよね?
もし変更が不可能だとしても、
idから部分文字列を切り出すとかすれば十分実現可能。
どうしても正規表現が使いたいなら、
http://dev.mysql.com/doc/refman/5.1/ja/regexp.html
ここを参考にすればいい。
でも、正規表現はそこそこ重い処理だから、
RDBMSでは極力使わないほうがいい。
http://dev.mysql.com/doc/refman/5.1/ja/regexp.html
ここを参考にすればいい。
でも、正規表現はそこそこ重い処理だから、
RDBMSでは極力使わないほうがいい。
>>459
PHPでmysqldに接続して(mysqld側の起動オプションで、charset絡みを何も指定せずに)
show variables like '%char%' ;
で、clientとconnectのところ。
PHPでmysqldに接続して(mysqld側の起動オプションで、charset絡みを何も指定せずに)
show variables like '%char%' ;
で、clientとconnectのところ。
>>455
tee
tee
>>466
tee log.txt でコンソールに表示されるログがすべて記録されるんですね。ありがとうございます。
tee log.txt でコンソールに表示されるログがすべて記録されるんですね。ありがとうございます。
為になるHP
http://u.aniota.info/?fayuwz
http://u.aniota.info/?fayuwz
同一テーブルをサブクエリでselectしてdelete出来ないので
テンポラリテーブルを使おうと思いますが、
テンポラリテーブルを削除する前に
何らかの形で操作側のプロセスが死んだ場合、
テンポラリテーブルだらけになるんじゃないかと思うのですが、
そのあたりはどうなってるのでしょうか?
テンポラリテーブルを使おうと思いますが、
テンポラリテーブルを削除する前に
何らかの形で操作側のプロセスが死んだ場合、
テンポラリテーブルだらけになるんじゃないかと思うのですが、
そのあたりはどうなってるのでしょうか?
>>475
mysqlというよりかは、DBIの問題じゃね?
mysqlというよりかは、DBIの問題じゃね?
↑ おっと、>>474 へのレスだ
perl/php などのスクリプトに接続IDとパスを書いて
そのmysql、この場合はlocalhostみたいだから鯖にphp置いてそこから
接続にいく感じ
ftpはそういうスクリプトを上げるときにつかうけど
mysqlにつかうときはバックアップを取るときくらいか
そのmysql、この場合はlocalhostみたいだから鯖にphp置いてそこから
接続にいく感じ
ftpはそういうスクリプトを上げるときにつかうけど
mysqlにつかうときはバックアップを取るときくらいか
ここでいいのかよくわかりませんが、疑問・質問等のスレッドがなかったのでここに書きます。使っているのはMySQLなのでここに書きますがデーターベース全般についてです。
ユーザー
+名前
+役割(役割テーブル)
役割
+名前
+説明
のように作る場合に役割を別のテーブルとして定義するとします、これは理解できるのですが。
駅
+住所
住所
+都道府県
+市町村とかそれ以外
のようにデーターベースでは分けるでしょうか?
Pythonのようなオブジェクト指向言語で組み立てれば「駅」オブジェクトは「住所」インスタンスを持つことになると思うので、このようなテーブル構造を思いついたのですが「駅」には固有の「住所」しか当てはまらないので別テーブルにする利点が無い。
「住所」なんてテーブルだと「家」というテーブルを作ったときにこのテーブルからも「住所」を参照することになって「住所」テーブルには「駅」「家」二つのテーブルの住所が記録されることになって美しくない。このような場合どのようにするのがベストでしょうか?
乱文・長文で失礼いたしました、気に触ったらスルーしてください。
ユーザー
+名前
+役割(役割テーブル)
役割
+名前
+説明
のように作る場合に役割を別のテーブルとして定義するとします、これは理解できるのですが。
駅
+住所
住所
+都道府県
+市町村とかそれ以外
のようにデーターベースでは分けるでしょうか?
Pythonのようなオブジェクト指向言語で組み立てれば「駅」オブジェクトは「住所」インスタンスを持つことになると思うので、このようなテーブル構造を思いついたのですが「駅」には固有の「住所」しか当てはまらないので別テーブルにする利点が無い。
「住所」なんてテーブルだと「家」というテーブルを作ったときにこのテーブルからも「住所」を参照することになって「住所」テーブルには「駅」「家」二つのテーブルの住所が記録されることになって美しくない。このような場合どのようにするのがベストでしょうか?
乱文・長文で失礼いたしました、気に触ったらスルーしてください。
とりあえず、リレーショナル理論とか正規化について勉強すれば?
RDBMSとかSQLは、オブジェクト指向だとか、
手続き型だとかとは全然違うことがわかると思う。
RDBMSとかSQLは、オブジェクト指向だとか、
手続き型だとかとは全然違うことがわかると思う。
>482
ここまでオブジェクト指向とにていると、どうしてもそれで考えてしまいますorz
おっしゃるとおり、やはりデーターベースの考え方をしっかり学んだほうがいいようですねorz
http://www.oreilly.co.jp/books/database/
のものを読んでみようと思います。ありがとうございました。
ここまでオブジェクト指向とにていると、どうしてもそれで考えてしまいますorz
おっしゃるとおり、やはりデーターベースの考え方をしっかり学んだほうがいいようですねorz
http://www.oreilly.co.jp/books/database/
のものを読んでみようと思います。ありがとうございました。
SELECT hoge FROM Nanika WHERE test BETWEEN 100 AND 1000;
SELECT N1.hoge FROM Nanika N1
WHERE N1.test NOT IN (
SELECT N2.test FROM Nanika N2
WHERE 100 AND 1000
);
・・・ごめんなさい。
SELECT hoge FROM Nanika WHERE test < 100 OR test > 1000;
SELECT N1.hoge FROM Nanika N1
WHERE N1.test NOT IN (
SELECT N2.test FROM Nanika N2
WHERE 100 AND 1000
);
・・・ごめんなさい。
SELECT hoge FROM Nanika WHERE test < 100 OR test > 1000;
すみません、単純に
test NOT BETWEEN '100' AND '1000'
で、目的の結果を得ることが出来ました。お騒がせしました。
test NOT BETWEEN '100' AND '1000'
で、目的の結果を得ることが出来ました。お騒がせしました。
>>486
ChangeLogのこれかな。
2003-06-22 Rudy Lippan <rlippan@remotelinux.com> (2.9002)
* Changed the default behaviour of mysql_found_rows, so now
'UPDATE table set field=?' will return the number of rows matched
and not the number of rows physically changed. You can get the old
behaviour back by adding "mysql_found_rows=0" to the dsn passed
to connect.
ChangeLogのこれかな。
2003-06-22 Rudy Lippan <rlippan@remotelinux.com> (2.9002)
* Changed the default behaviour of mysql_found_rows, so now
'UPDATE table set field=?' will return the number of rows matched
and not the number of rows physically changed. You can get the old
behaviour back by adding "mysql_found_rows=0" to the dsn passed
to connect.
mysqlをインストールして適当にデータを入れてみたのですが、このデータをhtml上に呼び出すのってどうすればいいのでしょうか?
SQLでselectしてデータを取り出すというのは分かるのですが、それをどうやったらページ上に表示できるのかなぁと
javascriptみたいにhtml上に直接かけるわけでもないですし
javascriptみたいにhtml上に直接かけるわけでもないですし
phpを使う場合はphpの中にSQLを書く事ができるんですね
SQLでデータベースからデータをselectした後、そこからさらにデータを絞り込む事はできますか?
具体的に言いますと、抜き出したデータの5行目~10行目だけを選択するという感じなのですが、可能でしょうか?
具体的に言いますと、抜き出したデータの5行目~10行目だけを選択するという感じなのですが、可能でしょうか?
>>499
それってSQLだけで可能ですか?
それってSQLだけで可能ですか?
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
みんなの評価 : ☆類似してるかもしれないスレッド
- MySQL 総合 Part12 (1001) - [94%] - 2008/1/30 17:34 ○
- MySQL 総合 Part14 (1001) - [94%] - 2008/11/23 10:17 ☆
- MySQL 総合 Part15 (1001) - [94%] - 2009/4/20 12:15 ☆
- MySQL 総合 Part17 (1001) - [94%] - 2010/6/10 20:47 ○
- MySQL 総合 Part18 (986) - [94%] - 2011/1/17 15:46
- MySQL 総合 Part19 (982) - [94%] - 2011/6/9 2:33
- MySQL 総合 Part23 (992) - [94%] - 2013/8/11 17:00
- MySQL 総合 Part26 (860) - [89%] - 2023/2/2 9:30
- MySQL 総合 Part20 (995) - [89%] - 2011/10/17 4:48
- MySQL 総合 Part21 (1001) - [89%] - 2011/12/25 22:16
- MySQL 総合 Part22 (1001) - [89%] - 2012/7/10 16:45
- MySQL 総合 Part24 (1010) - [89%] - 2015/2/14 4:46
- MySQL 総合 Part25 (947) - [89%] - 2017/6/18 6:30
- MySQL vs PostgreSQL Part2 (941) - [31%] - 2022/5/26 1:30 ○
トップメニューへ / →のくす牧場書庫について