mysql ヘルプ!
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
02/01/22 16:08ID:kMbsTQE3状況を詳しく書きます
PHPが動くプロバイダーのディレクトリにおいた自分の家の
mysqlサーバを操作するPHPに
$db = mysql_connect("mysqlサーバのip:3306","ゆーざ","ぱす");
と書いたのですが、駄目でした。
どうすればいいのでしょうか?
0628nobodyさん
04/10/11 10:38:34ID:29ynadmT例えば、日記のデータが保存されているDBで、
8月1日からのデータから過去に10日分表示させたい場合のセレクト文がわかりません。
※データは必ずしも毎日入っているわけではありません。
このテーブルのPRIMARY KEYはtoday(データ型:date)です。
SELECT today FROM diary WHERE today = '2004-08-01';
だと1日分ですが…ここから10件表示させたいんです。
ヨロシクお願いしますm(_ _)m
0629nobodyさん
04/10/11 11:34:21ID:???じゃないの?俺もよくわからんけど。
0630628
04/10/11 12:09:30ID:29ynadmT有難うございました♪スレのレベル下げちゃってゴメンナサイ。
629さん有難うございました。
0631nobodyさん
04/10/12 13:43:09ID:???PHP上で、
mysql_query("CREATE table temp1 AS SELECT id FROM m_act_imp WHERE (name LIKE '%".$act."%');");
という文を発行すると、テーブルtemp1はできますが、
LIKEにマッチしてるにも関わらず空になってしまうのです。
phpmyadmin上でならばtemp1上のidにデータが格納されるのですが・・・。
何故空になってしまうのでしょうか?
よければお教えください。お願いします。
MySQLは3.23.58です。
0632nobodyさん
04/10/12 15:16:37ID:???思わぬ勘違いをしていることもよくあるから、まずはqueryに渡す文字列を画面に
も表示してみることから始めてみましょう。
0633631
04/10/12 17:49:38ID:???単にレンタルサーバのユーザーに権限がなかっただけ・・・ですかね。
MySQLは4.0.12ですが関係ないでしょうし・・・。
>>632
それはやってたんですよね。
結果的にはあまり関係はありませんでしたが、
お早いお返事ありがとうございました。
0634nobodyさん
04/10/13 08:01:16ID:pwP4Zh+Wo 時毎
とはどういう意味でしょうか?
0635困りました
04/10/13 18:56:57ID:4r9iZ+Q4MySQL+PHP4.Xで開発をしているのですが
ある不特定のユーザーが登録済みのデータや画像ファイルを変更しようとすると
登録してあるデータおよび画像ファイルが消えてしまう現象が起きました。
消えない場合もありました。
PHPのソースを追いかけても削除しているロジックがありません
内部で再現テストをしてもまったく起きる気配がありません。。。
しかし、ユーザーから「データが消えた」とクレームがいまだ来たりしています。
一般向けに公開しているサイトであるため複数アクセスはあるので
トランザクションの問題かと思ったりもしたのですが
テスト上ではこういう現象はやはり起きませんでした
MySQLの設定でこういう問題は回避できるのでしょうか?
それともユーザーの回線が細いとこういう現象がおきやすいのでしょうか?
OSはRedHat7Jです
0636困りました
04/10/13 18:58:58ID:4r9iZ+Q4MySQL のバージョンは、3.23.54 です
0637nobodyさん
04/10/13 20:26:54ID:???そんだけの情報で何か判断は付かんわ。
不完全なデータで更新(上書き)されちゃってる感じか。
再現テストは「ユーザーの回線が細い」と問題がでると思われる
ような作りの部分があるなら、ちゃんとネットワークの延滞を作ったり
帯域を絞って仮想環境作ってテストした方が良いよ。
0638困りました
04/10/13 20:53:13ID:4r9iZ+Q4ネットワークの延滞を作ったり
帯域を絞って仮想環境作ってテストしていないので
まずはそこら辺を考慮したテストを行っていきます。
0639nobodyさん
04/10/13 21:32:59ID:???あとDBMS側で更新クエリログを取るのと、PHPスクリプト側で
要所要所でログ出力してテストしないと意味が無いので忘れずに。
0640nobodyさん
04/10/14 18:09:39ID:bdzAlbuaname | DATA
-----+------
neko |ねこ
nuko |ぬこ
giko |ぎこ
(以下略)
こーゆーテーブル試しに作って、
select * テーブル where data 'ね%';
を実行すると、[ねこ]と[ぬこ]がマッチしてしまうのだが、これはなぜだ?
select * テーブル where data 'ぎ%';
だとちゃんと[ぎこ]だけがマッチするんだけどなぁ。
0641nobodyさん
04/10/14 18:23:47ID:???select * テーブル where data like binary 'ね%';
MySQLは文字列比較するときデフォルトでアルファベットの大文字小文字を
同一視するようになっている。その副作用と思われ。
ttp://dev.mysql.com/doc/mysql/ja/Case_Sensitivity_Operators.html
0642nobodyさん
04/10/14 18:50:10ID:???すばやい回答さんくす。
SQL自体勉強始めたばっかりなもので。
これからがんばってドキュメント類ばりばり読み進めます。
海より深く感謝。
0643nobodyさん
04/10/15 17:26:39ID:K5MUiGQA掲示板の書き込みの管理くらいしか思いつきませんが…
みなさんはどんな用途でMySQL使ってるんですか?
0645nobodyさん
04/10/15 19:13:21ID:???0646nobodyさん
04/10/16 08:41:00ID:???やらないよりはやったほうがいいんじゃないの?
複数人で使う掲示板ならなおさらだね
0649nobodyさん
04/10/17 03:51:26ID:???処理早いよね?
0653nobodyさん
04/10/18 11:46:27ID:x7S7FTDO【環境】
OSX10.3.4
PHP4.0
phpMyAdmin Version 2.6.0, pl2
上記の環境をローカルに作成したのですが
phpMyAdminがうまく動作しません。
言語の変更やテーブル作成をしようとクリックすると
サーバが見つかりませんというエラーが出てしまいます。
0654nobodyさん
04/10/18 11:57:56ID:???0655653
04/10/18 12:26:21ID:x7S7FTDOcommand not foundで認識されません。
0657653
04/10/18 13:25:01ID:x7S7FTDOおそらくMySQLのほうが怪しいです。
手順通りインストールしたものの
コマンドが使えません。
書籍にはインストールしたらすぐに
コマンドを使用できると書いてあるのですが。
もちろんMySQLは起動してます。。。
0658nobodyさん
04/10/18 15:39:18ID:???↑
そのままだと思うw
サーバーがないんじゃ・・・w
http://homepage.mac.com/dnagase/macosx/perlcgi.html
どうやら、MacはBSD仕様なのね
生意気なw
0660653
04/10/18 18:31:28ID:x7S7FTDOcommand not found。。
mysqlコマンドを使用するのに
特別な設定が必要なのでしょうか??
0661nobodyさん
04/10/18 18:58:41ID:???・(そのユーザに対して)パスが通ってない。
・コマンドツール類がサーバとは別パッケージで、それをインストールしてない。
本の記述通りのもの(同一バージョン/パッケージ)を、指示通り入れてるか確認
0662653
04/10/18 19:04:27ID:x7S7FTDOお返事ありがとうございます。
一番目のパスの設定は特にしていないです。
どのように設定するのでしょうか??
0663nobodyさん
04/10/18 19:09:33ID:???0664nobodyさん
04/10/18 19:42:22ID:???0665nobodyさん
04/10/18 21:56:32ID:x7S7FTDOコマンドたたいて入りました。
mysql> create database XXX;
ERROR 1044: Access denied for user: '@localhost' to database 'XXX'
これはどういう状態なのでしょうか??
0667nobodyさん
04/10/18 22:04:36ID:x7S7FTDO今度はrootで入ったら
mysql> create database XXX;
ERROR 1006: Can't create database 'XXX'. (errno: 13)
というエラーが発生してしまいました。
0668nobodyさん
04/10/18 23:08:50ID:???> ERROR 1006: Can't create database 'XXX'. (errno: 13)
errno 13はOSが出してるエラーで、EACCESS (Permission denied)。
MySQLではデータベースをディレクトリにマップするので、このエラーが出たということは
mysqldはデータディレクトリ内にサブディレクトリを作る権限がないということ。
データディレクトリのパーミッションを確認してみたら?
0669nobodyさん
04/10/18 23:36:36ID:x7S7FTDO回答が質問を呼ぶ形になって申し訳ないです。
mysqldとは一体なんなのでしょうか?
0670668
04/10/18 23:49:38ID:???おいおい…
mysqldはクエリを解釈してデータへアクセスしたりするデーモン(サーバ)で、常時稼動している。
mysqlコマンドを含むクライアントはこのデーモンに接続してクエリを発行し、結果を受け取る。
http://dev.mysql.com/doc/mysql/ja/Server-Side_Overview.html#IDX662
手元に書籍があるならまず載ってるから、ちゃんと読んでね。
0671nobodyさん
04/10/19 22:13:12ID:rQaAfL61やっぱりwindowsサーバはゴミだな
0674nobodyさん
04/10/20 11:09:05ID:???0675nobodyさん
04/10/20 14:53:55ID:???メールアドレスの重複を許さないテーブルを作成したいと思います。
メールアドレスをprimary keyとして指定すればいいのだと思うのですが、
255文字以上の文字列はprimary keyにできないのでしょうか。
RFC2821で許されるメールアドレスの最大長は64byte@255byteとのことで、
255文字を超えてしまいます。
ハッシュをprimary keyとすることもできるようなのですが、
SHA1やMD5などのハッシュを使うと非常にまれに異なるメールアドレスから
同一のハッシュが生成されてしまうのではないでしょうか。
どなたか知恵を貸していただけませんでしょうか。
0676nobodyさん
04/10/20 15:55:21ID:???バージョンがわからないのでなんともいえないけど
1. TEXT型とする(格納前にアプリケーション側で長さチェック)
CREATE TABLE mailaddr(addr TEXT NOT NULL, PRIMARY KEY(addr(320));
2. local-partとdomainに分けて複合キーとする
CREATE TABLE mailaddr(localpart CHAR(64) NOT NULL, domain CHAR(255) NOT NULL,
PRIMARY KEY(localpart, domain));
3. 最大キー長を変更してmysqldをコンパイルしなおす
4. 「このシステムはRFC821に従いました」と主張する、または255文字を超えるメールアドレス
は格納できない仕様だと主張する
0677675
04/10/20 15:56:42ID:???× CREATE TABLE mailaddr(addr TEXT NOT NULL, PRIMARY KEY(addr(320));
○ CREATE TABLE mailaddr(addr TEXT NOT NULL, PRIMARY KEY(addr(320)));
閉じ括弧が1つ抜けてた。
0678nobodyさん
04/10/20 17:05:19ID:???アプリ側で厳密チェックという作りではいかんのか?
SQLのユニークエラーでは弾けないけど。
0679675
04/10/20 17:26:25ID:???>>676
少なくとも手元の環境(debian stableとtestingの3.23.49と4.0.21)では1.が蹴られましたので、
3.が必要となると思われますが他のアプリケーションへの影響が怖いのと、
そもそもの255文字という制約が2.の解を採るべきだと示唆しているように思えますので、
今回は2.で行こうと思います。それでも手元では500byteまでみたいですが。
クライアントがいる場合は4.もアリですね。
>>678
Webアプリでページからメールアドレスを登録できるようなものを考えていて、新規エントリを
加える際にいきなりinsertして、それが成功したか否かで重複を検出しようと思っているのです。
今回は最大320文字なのでこれをインデックスに使っても効率の問題は出ないと思うのですが、
これが桁違いに大きいデータの場合はどうすればいいのでしょうね。
世の中的にはSHA1の衝突確率を0とみなしてハッシュのみをprimary keyとすることになっている
のでしょうか(データ自体の比較は行なわない)?
0680nobodyさん
04/10/20 19:29:01ID:???現実的にはドメイン部分はサブドメイン有りでも100文字あれば足りるので
255で切っても良いと思うけどね
可能性を考えたら切りないし現実的な対応も設計者のセンスだと思うよ。
おれなら255で切って、これで入力出来ないとか言う人は愉快犯として無視するね。
0681nobodyさん
04/10/20 21:48:24ID:5ZEjjEhOcmd.exeからc:\mysql\bin\mysqlにログインして「set globals ○○=××;」とすると
設定が変更されるんですが、マシンを再起動すると初期値に戻ってしまいます。
何度やってもそうなります。なぜなんでしょうか?
0682nobodyさん
04/10/20 22:54:23ID:???そういう作りになってるから。
正確には貴方が恐らく欲しいと思われる結果に対しての
操作の選択肢として間違ったものを選んでいるため。
0683nobodyさん
04/10/20 23:30:08ID:5ZEjjEhOどうしたらいいんでしょうか。お願いします、教えてください。
0684nobodyさん
04/10/21 02:53:07ID:???MySQL Manualページの左側にある「Search the MySQL manual」で
「SET GLOBAL」を検索すると答えが書いてあるページが見つかります。
MySQL Manual
http://dev.mysql.com/doc/mysql/ja/
5.5.6 SET 構文
http://dev.mysql.com/doc/mysql/ja/SET_OPTION.html
>GLOBAL を使用した場合、サーバの再起動が行われるまで
>オプションが記憶され、新規接続時も使用されます。
>オプションを永続的にする場合は、オプション設定ファイルに設定します。
>See section 4.1.2 `my.cnf' オプション設定ファイル。
4.1.2 `my.cnf' オプション設定ファイル
http://dev.mysql.com/doc/mysql/ja/Option_files.html
0686nobodyさん
04/10/21 13:25:01ID:a34sr5QL何か特別な設定が必要でしょうか?
0687nobodyさん
04/10/21 15:51:04ID:???0688nobodyさん
04/10/21 16:16:42ID:???0691nobodyさん
04/10/21 17:36:05ID:???それは auto_increment じゃなくて magical_increment じゃん www
create table T1 (
a int not null primary key auto_increment
);
select concat('a', lpad(a, 3, '0')) from T1;
0692nobodyさん
04/10/21 20:51:48ID:B+QZBvw9文字の最大長のみが違う二種類のデータがあるんですが、
テーブルを別にするべきか、
全部textにして一つのテーブルに入れちゃうべきか、悩んでいます。
あまり違わない気もするし…どうなんでしょう?
0693nobodyさん
04/10/21 20:54:16ID:???tinyint(11)ってどうちがうんでしょうか?
0694nobodyさん
04/10/21 23:40:50ID:???まずは正規化とかそういうのをちゃんと勉強して
まっとうなスキーマ設計ができるようになれ
負荷とか効率とかで悩むのはそれからでいい
0695nobodyさん
04/10/21 23:57:03ID:???64bit
=2^64
=18446744073709551616
つまり仮に1日に1億IDを消費しても、
184467440737日=505390248年もつ
この計算であってますか?
0698nobodyさん
04/10/22 20:45:08ID:???例えば2ちゃんねるみたいな大量アクセスがあり、頻繁に書き込みがある
スレッドと、そうではなく過疎化しているスレッドからなる掲示板があって、
1つのテーブルでユニークID、板ID、スレッドID、記事ID・・・のように
管理するとします。細かい話をしだすとキリが無いので、なんとなく一般的に
ベストなインデックスがついているとします。この場合、メモリ管理はどのへんの
設定を変えるとパフォーマンスに一番効果があるでしょうか?query_cache_sizeでしょうか?
ちなみにあくまでMYSQLの知識欲を満たしたいので、HTML化しろとかは無しで。
0699nobodyさん
04/10/22 21:29:33ID:???>細かい話をしだすとキリが無い
ここをちゃんと出してくれなきゃ、最適化なんて出来ないべさ。
特に掲示板の仕様(DB周辺)と掲示板の使われ方(アクセス)の割合とか。
ROMが多いなら、チューニングも変わってくるだろ。
0700698
04/10/22 21:52:08ID:???では書き込みをするユーザ1に対してROMが99人いるという前提にしてください。
また、いわゆる「祭り」状態はイレギュラーなので、条件から除外してもらってもかまいません。
もちろん、「祭り」込みでの提案も歓迎です。
0701nobodyさん
04/10/22 23:50:39ID:???まだまだ足りないが…
まあ、オーソドックスで正しいDB設計のBBSにおいて
書き手(UPDATE/INSERT)に対して、読み手(SELECT)が圧倒的に
多ければクエリキャッシュは充分にパフォーマンスアップに貢献する。
実際自分のところで早々にMySQL3からMySQL4に移行した理由のひとつ。
但し、アプリがキャッシュがきちんと働くクエリが組み立てられるつくりに
なっているか、その辺の見直しは必要。普通に作っても変なクエリは
投げてないと思うけど。読み出しカウンターを同一のテーブルに
入れてる目も当てられない作りにする香具師がいないとは、
昨今のレベルをみてると、言い切れないからね。
0702nobodyさん
04/10/23 01:04:29ID:fI1cafOMUnixのMySQLサーバから一覧情報を取得して、Excelに一覧表示を行い、
再度入力された条件から、MySQLサーバにデータの登録を行う処理を
考えております。
経験者の方おりましたら教えていただきたいのですが、Windowsから
Unixのデータベースに接続して処理を行うためには、クライアント側の
設定はODBCの設定でホストIPアドレスにUnixサーバのIPアドレスを指定
することで対応できるのでしょうか?
急きょ調査することになりまして、数少ない情報のなか、ご存知の方お
りましたら宜しくお願いします。
0703nobodyさん
04/10/23 02:29:49ID:???アプリ側がODBC APIを使って接続するなら、純正のMySQL用
ODBCドライバー - MyODBCについて調べてみてください。
0704nobodyさん
04/10/23 14:29:04ID:???>読み出しカウンターを同一のテーブルに
>入れてる目も当てられない作り
ここんとこ、もう少し詳しくお願いしたい。
ぶっちゃけるが、「読み出しカウンター」という言葉すら知らんかったので。
0706nobodyさん
04/10/23 19:41:23ID:???その記事が何回読まれたとか、そういう変化の激しいフィールドを
含めてたりしてないかということ。要するにテーブル内の値が
変化するとキャッシュが毎回無効になるでしょ。
もしそれが本当に必要なら別枠で保持して無いと駄目。
0708nobodyさん
04/10/24 01:08:51ID:AzGved6Lmin(hoge)で0は返さないように、あるいはmax(hoge)でnullを返さないようにするのはできますか?
0710nobodyさん
04/10/24 23:43:40ID:???0711nobodyさん
04/10/24 23:51:32ID:???それは無理です
>710
それも無理です
count()のdistinctみたいなのがmin()やmax()にもあるかと期待しただけなんです
0712nobodyさん
04/10/25 00:05:24ID:???他人と最低限の意思疎通ができる文章力をまず身につけることだな
何が「無理」なんだ?>>708の文章から相手に何が伝わると思うんだ?
0713nobodyさん
04/10/25 11:16:33ID:???0714nobodyさん
04/10/25 19:37:05ID:wXNHm+JOサービスが立ち上がらなくなってしまったので
MySQL4.0.20-bをアンインストールし、MySQL4.0.21を
4.0.20-bと同じC:\mysql\以下にインストールしなおしたところ
C:\mysql\data\の内容を読んでくれないのです。
my.iniには
datadir=C:/mysql/data
と記述されています。
どうしたら4.0.20-bのデータベースを読み込む事が出来るのでしょうか?
アドバイスをお願いいたします。
0715nobodyさん
04/10/25 21:51:57ID:L0lPqJ99今SQL文は勉強中なのですが…質問させてください。
環境は、PHP4.3.8 + MySQL 4.0.20です。
ゲームの結果を入出力、計算出来るシステムを作っています。
テーブルがT1とT2の2つあり、
T1には試合結果、T2にはメンバーデータが入っています。
T1テーブル(試合結果)には、主に4v4で行うゲームのため、
勝者ID1〜4、敗者ID1〜4という8個のカラムが含まれています。
また、T2テーブル(メンバーデータ)は、上記からご察しの通り、
1レコードが1プレイヤーのデータで、主キーとしてプレイヤーID(AUTO INCREMENT)があります。
このシステムを構築する上で、なるべくSQL側に処理をさせようと考え、
勝敗数などのカラムをプレイヤーデータには作っていません。
で、なんとかなるだろうとやっていたんですが、そこで行き詰まりました。
SELECT プレイヤーID,勝数,負数,(勝数*100/(勝+負))as勝率
FROM 両方のテーブル(T1,T2)
ORDER BY 勝数(負数や勝率等も)
みたいなことがしたいのですが、どうも分かりません。
サブクエリというのが使えればいけるかと思ったんですが、MySQL4.2からのようで。
INNER JOINなんかを使うのかな、なんて思ったんですが、
どうもテーブルの結合(?)というのが理解し辛く、壁にあたっております。
どなたか、模範解答なんぞを示してくださると助かります。
mysql ヘルプ!
0716715
04/10/25 21:56:02ID:???このシステムは、試合データは数百以上、
メンバーデータは50レコードに満たない程度のものです。
実は最初、T2テーブルのほうに、勝数や負数のカラムを配置して、
ログベースで処理していたんですが、
自分のスキルアップのために、上記のような形に挑戦しています。
この程度のものでしたら、前者と後者で、どちらの処理のほうが、
理想的なものなのか、助言も頂けると幸いです。
よろしくお願いします。
0717nobodyさん
04/10/25 23:37:40ID:9fphDW68以下のエラーで困ってます。
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (61)
MYSQLのページのエラーマニュアルを呼んだんですがさっぱりです
0718nobodyさん
04/10/26 09:05:19ID:???おいらはアンタがどういう環境でどういう状況(インストール直後なのか運用中で)に
そうなってるかが、その書き込みからだけだとさっぱりだよ。
0719nobodyさん
04/10/26 09:21:12ID:???> 勝者ID1〜4、敗者ID1〜4という8個のカラム
ここが少しひっかかる。主に4v4というけど、この対戦人数は変わったりするの?
勝敗の集計をプレイヤーIDごとに出したいんだったら、
プレイヤーマスタテーブル
プレイヤーID
氏名
他、詳細データ…
対戦組み合わせテーブル
組み合わせID
プレイヤーID
東西区分
勝敗テーブル
組み合わせID
勝敗(東or西)
勝敗を表わすのにどうしようか迷ったけど
相撲に倣って東/西と称してみた。
0720715
04/10/27 03:54:49ID:???お返事遅れて申し訳ないです。
ありがとうございます。
> 主に4v4というけど、この対戦人数は変わったりするの?
そうですね、可変です。
勝者ID1と敗者ID1というカラムが必須で、後はNULLが入る可能性もあります。
書いて頂いたテーブル構成での「組み合わせID」ですが、
現在、1試合(=対戦組み合わせテーブル1レコード)に、
こちらもAUTO INCREMENTでIDを振っていますんで、これでいけそうです。
頑張ってみます。
重ね重ねありがとうございました。
0721nobodyさん
04/10/27 09:54:33ID:fSBouGHv取得したデーターの何個目からfetchするとかできますかね?
今は、
1 while $sth->fetch and ++$count < $s_;
みたいに、fetchをから回し($s_がスタート地点)してるのですが、
スタート地点が大きい場合(ぶっちゃけ10000とか)があるので、
ちょっといやなんですが、、
0722nobodyさん
04/10/27 10:32:37ID:???0723721
04/10/27 10:32:53ID:???selectでオフセット指定できました。
似たようなDB作ろうとしてるんだけど、
例えば1選手の、1試合の成績を収めようとしたら
選手分だけのTableが必要になる?
選手200名を1人ずつTable管理するのは大変だよね
どうしてます?
MySQL4.1以上になると2次元扱いが可能になるらしいけど、
Installがミスって何故か弾かれる、、、
0726719
04/10/27 14:13:24ID:???プレイヤーマスタテーブル(プレイヤー1人あたり1レコード)
プレイヤーID
氏名、他、詳細データ…
試合マスタテーブル(試合1回あたり1レコード)
試合ID
勝利チーム(NULL or 紅 or 白)
開始年月日、試合場、他、詳細データ…
対戦組み合わせテーブル(試合×参加プレイヤー=1レコード)
試合ID
プレイヤーID
チーム区分(紅or白)
>>724
1選手1レコードのテーブルひとつで済むよ
0727719
04/10/27 14:17:02ID:???> 対戦組み合わせテーブル(試合×参加プレイヤー=1レコード)
っていうのは、8人参加の場合は1試合あたり8レコード
6人参加の試合が4回あったら24レコード
という意味です。
■ このスレッドは過去ログ倉庫に格納されています