MySQL 総合 Part13 ..
[2ch|▼Menu]
562:NAME IS NULL
08/04/12 21:19:46
>>560
プログラミング言語は何?

563:NAME IS NULL
08/04/12 23:17:39 IYNGfhn4
myisamchkのテストをしたいのですが
うまく壊れたファイルがありません
インデックスを壊すにはどうしたらいいですか?

564:NAME IS NULL
08/04/13 00:33:22 4TX2K7e+
稼働中のdb引っ張ってきたらうまいこと壊れてましたが
テーブルのメンテナンスってどうしてます?
チェック→引っかかったら、修復前のファイルを保存
→修復→修復できたら修復前のファイルを削除・
修復できなかったら管理者にメール
こんな感じですか?

565:560
08/04/13 03:31:23 t+wHgJcY
>>562
ごめんなさい 書き忘れてました
php5で作っています

566:NAME IS NULL
08/04/13 08:42:41
>>565
普通に mysql_query() の戻り値を調べるのじゃダメなの?

567:NAME IS NULL
08/04/13 15:27:41
サーバを ./configure --prefix=/usr/local/mysql --with-charset=ujis --with-extra-charsets=all で
make

phpMyAdminでみるとメインページに UTF−8

MySQL の文字セット: UTF-8 Unicode (utf8) ←どこに依存ですか?

568:NAME IS NULL
08/04/13 23:00:38 i44zPYKS
URLリンク(dev.mysql.com)
ここを見るとバックアップ前にFLUSH TABLESをしろと書いていますが
/etc/init.d/mysql stop
でサーバを止めた時は、
自動的にFLUSH TABLESも行われていると考えていいのでしょうか?

569:NAME IS NULL
08/04/14 02:22:05
>>568
考えていい。

570:NAME IS NULL
08/04/14 03:52:51
>>1に紹介されているサイトをささっと見てきたんだけど
実際の画面とか見たかったんだけどどこにあるのかわかんなかった
初心者でも直感的に使えそうなの?
マウス操作でドロップしてデータを入力していくとか
違った文字数の入力も可能なのかな?
1行の構成が日本語で約100文字と約300文字の2種類あり
この2種類で1ページとして2万ページくらい自動入力したい
初心者なんですが直感だけでいけますか?

571:NAME IS NULL
08/04/14 18:56:36
下記の様なテーブルがあったとします。
(即席で作ったリストなので細かい事は気にしないで下さいませ)

no type
-----------
1  friend
1  friend
1  family
2  family
2  friend
3  friend
3  friend
3  family
3  family

この時、カラム[no]でGROUP BYを掛けてしまうと、

1 friend
2 family
3 friend

という風になってしまいます。
これをそれぞれのtypeごとにGROUP BYを掛けて下記のように抽出したいです。

1 friend
1 family
2 family
2 friend
3 friend
3 family

どのようなSQLを書けばこのように抽出されますでしょうか?
どうかご教授の程宜しくお願い致します。

572:NAME IS NULL
08/04/14 19:03:28
>>571
distinct

573:NAME IS NULL
08/04/14 19:09:39
DISTINCTも同じ重複削除の為、真ん中のと同じ結果になってしまいます

574:NAME IS NULL
08/04/14 19:18:02
重複してないじゃん。真ん中の結果になるわけなし。 なるならSQLの誤り。

575:NAME IS NULL
08/04/14 19:32:40
SELECT DISTINCT(no) FROM hoge
というSQLではない?

576:NAME IS NULL
08/04/14 19:58:06
select distinct no,type from hoge

577:NAME IS NULL
08/04/14 20:12:08
うわ、こんな書き方できたなんて。。。
SELECT DISTINCT(no), DISTINCT(type) FROM hoge
とかやって、エラー出るからDISTINCTって一つしか指定できないもんだと思ってた。
ありがとうございます!

578:NAME IS NULL
08/04/14 21:42:25
>DISTINCTも同じ重複削除の為
ってあたり危ないな。
GROUP BYは重複削除のためにあると思ってないか?

579:NAME IS NULL
08/04/14 22:06:24
GROUP BYは集計ですよね、まとめた後にCOUNTとかSUMとか。
でも、DISTINCTもそういう計算が無いバージョンのGROUP BYと思ってた。

580:NAME IS NULL
08/04/15 01:12:39
>>577
つうかdistinctで括弧使う変な書き方初めてみたわ

581:NAME IS NULL
08/04/15 08:42:18
>>577
その書き方俺も初めて見た
関数じゃないのに勘違いしてないか?

582:NAME IS NULL
08/04/15 12:38:16
下のようなテーブルがあったとして
IDごとにアクセス端末がいくつあるか(今日の)カウントした値をとりたいのですがどんな方法がいいでしょうか?

table_log
---------------------------
id   ua     time
1   a  2008-04-07
2   s  2008-04-07
1   i  2008-04-07
1   i  2008-04-07
2   a  2008-04-07
4   i  2008-04-07
1   s  2008-04-07
1   i  2008-04-07
1   i  2008-04-06
.................

SELECT
 (SELECT COUNT(*) FROM table_log WHERE id=a.id and ua='i' and time="2008-04-07") As 'i',
 (SELECT COUNT(*) FROM table_log WHERE id=a.id and ua='i' and time="2008-04-07") As 'a',
 (SELECT COUNT(*) FROM table_log WHERE id=a.id and ua='i' and time="2008-04-07") As 's'
 (SELECT COUNT(*) FROM table_log WHERE id=a.id and time="2008-04-07") As 'all'
FROM table_log a
WHERE id = 1;

こんな感じでとっているのですが1つのIDに12秒くらいかかります。

583:NAME IS NULL
08/04/15 12:56:16
select id,ua,count(*) from table_log where time="2008-04-07" group by id,ua order by id,ua;

584:NAME IS NULL
08/04/15 17:28:33 WrDaLq3k
mysqldumpでリモート接続先のdumpを取得しています。
今回、新たにstored procedureを導入しました。
dumpデータにプロシージャも含めるめ、-Rをつけて実行しましたが
リモート接続ではプロシージャのdumpがとられていません。

たぶん、権限の問題ではないかと思いますが、プロシージャのdumpに
必要な権限とはなんでしょうか?

ちなみに現在は、
SELECT,
LOCK TABLES,
EXECUTE,
CREATE ROUTINE,
ALTER ROUTINE ON
を与えています。


585:NAME IS NULL
08/04/16 01:34:54
カラムの型をBIGINT unsigned にしたのですが、最大値が2147483647までしか入りません。
create show tableでもBIGINT unsigned に変わっていることは確認できました。
何が原因なのでしょうか?

586:NAME IS NULL
08/04/16 10:56:03
>>585
クライアントは何使ってるの? それがintにしか対応してないって可能性はない?

587:584
08/04/16 11:47:23
どうやら権限の問題ではなく、定義者の問題のよう。
SPを作成したユーザ=definerがdumpできるようです。
なのでリモート接続するユーザを明示的にdefinerしてやれば
dumpできました。
ただ、SPを実行する際にdefinerの権限で動作する(sudo definerみたいなもん?)
ようなのでSP内でtemporaryテーブルや、insert, deleteを行っていたら
その権限がリモート接続するユーザに対して必要になる。
dumpだけの最小限の権限を考えていたのでちょっと困った。

588:584
08/04/16 12:09:44
もっと調べてみると
SQL SECURYTY でdefiner, invokerが指定で着るみたい。
つまり、定義者はリモート接続するユーザで
セキュリティ的には実行者とすることで
解決できそうな予感。

589:NAME IS NULL
08/04/16 14:02:02 Li0u4etG
質問なのですが、MySQL5のレプリケーション、マスタ-スレーブ構成時における
マスタ-スレーブ間のデータの同期間隔はどれくらいなのでしょうか?
調べていく内に仕組み等はわかるようになったのですが、同期間隔に関して詳しく書いている資料を発見できませんでした。
スレーブ側はクエリーログを受け取って順次実行していくので、同期間隔はハード性能に依存するところが大きいのでしょうか?
この変の挙動についてお詳しい方がおられましたら是非教えて頂けませんでしょうか。

590:NAME IS NULL
08/04/16 19:33:33 QEaTF0YF
データベースで
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| kokyaku |
| mysql |
+--------------------+
3 rows in set (0.00 sec)

mysql> use kokyaku
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> insert into address (id,name,zip,city,addr,tel,date) values(1,'山田花子','100-0000','東京都千代田区','千代田1-1-1',012-345-6789',now()) ;
と入れたんですが、ちゃんと入力が完了しません。
Query OKがでないんですが、どうしたらいいですか?
あとReading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

これってなに?

591:NAME IS NULL
08/04/16 20:25:14
>>590
電話番号カラムの記述をよく見てみ

592:NAME IS NULL
08/04/16 20:28:36
>>589
気にしたことないけど、ネットワーク速度よりかはスレーブ側の更新クエリの
速度に引っ張られるんじゃないかな。

593:NAME IS NULL
08/04/16 20:34:04
>>589
何を使ってるかしらぬが、処理側の変数がオーバーフローしてるんじゃね?

594:NAME IS NULL
08/04/16 20:35:15
↑ 585 へのレスだった。

595:NAME IS NULL
08/04/16 21:31:19
URLリンク(mirror.provenscaling.com)

READMEにデュアルライセンスって書いてあるのですが
購入しないとインストールできない仕組みになっているのですか?

596:NAME IS NULL
08/04/16 22:54:41
すいません、意味が分からないので質問変えます

公式では5.0.51aまでしかDLできないので、URLにある5.0.58が非常に気になります。
インストールして使用することに問題はないのでしょうか?

597:NAME IS NULL
08/04/17 00:05:56
>>596
>>595のリンク先はEnterpriseで有償
Community Serverは無償

598:NAME IS NULL
08/04/17 03:47:31
MySQL Conference & Expo 2008からカキコ

599:590です。
08/04/17 08:37:37 xQuLnTlv
insert into address (id,name,zip,city,addr,tel,date) values (1,'山田花子','100-0000','東京都千代田区',' 千代田1-1-1','012-345-6789',now())
;
これでいくかな?


600:NAME IS NULL
08/04/17 08:44:00 k/clcQ5/
MySQL5.0+php5でシステムを組んでいるのですが、
Out of memory (Needed xxxxxx bytes)
のエラーが頻繁に出て対処に困っています。

メモリーは2GBで、アクセス数は1時間で4000PV位です。
メモリーはサーバーの仕様でこれ以上増やせないのですが、
my.cfのどこかの設定値を変更して対応することは可能でしょうか?
宜しくお願いします。

601:NAME IS NULL
08/04/17 09:41:28
>>600
エラーを吐いてるのは mysqld?クライアント側?

602:NAME IS NULL
08/04/17 09:52:46
>>600
多分php.iniのココ。
memory_limit = **M

603:NAME IS NULL
08/04/17 09:54:21 k/clcQ5/
>>601
phpから、DBにコネクションを確立した後、SQL文を実行した際に発生しています。
ちなみに、このエラーの発生頻度は約30回/日です。PVは6万PV/日、実行SQL数80万SQL/日です。

宜しくお願いします。

604:Zeno ◆5nZQbNmQPs
08/04/17 16:22:49 dYEsVLTe

Sun Microsystems が MySQL のソースコードをクローズするらしいな。
つまり、 MySQL がオープンソースではなくなるということだ。
買収した会社が Sun 故にこうなることは予想できていたが、その実行が予想より早くなりそうだ。
Sun は本気で死ね。

Sun to Begin Close Sourcing MySQL
URLリンク(developers.slashdot.org)



605:NAME IS NULL
08/04/17 16:49:44
>>603
大量のクエリ結果を配列にぶち込んでるからじゃね?

606:NAME IS NULL
08/04/17 19:02:36 wr9HmqHR
初心者です。
しょうもない質問ですが、みんな結合テーブルを使ったselectとかバキバキ
利用してるんでしょうか?
URLリンク(www.techscore.com) を見て今勉強してます
これは、結果的にどういうメリットがあるんでしょう?
複数回クエリする必要がなくなる→負荷とエラーの発生率が下がる ということですか?


607:NAME IS NULL
08/04/17 19:54:13
example.jp からのみ許可するMysqlユーザを作成して
example.jp からアクセスしてみたら、

Host 'example.com' is not allowed to connect to this MySQL server

ってエラーが出た。
example.com ってどこから読んでるの?
OSはLinuxって
hostname しても example.jp ってちゃんと表示されるんだけど。
逆引きしてもちゃんとexample.jp になるし。
どなたかヘルプミー

608:NAME IS NULL
08/04/17 20:07:21
> example.jp からのみ許可するMysqlユーザを作成して

ここの作業間違ったんだろうが。


609:NAME IS NULL
08/04/17 20:07:45
>>606
正規化を勉強しなさい。

610:NAME IS NULL
08/04/17 20:10:22
>>608
グローバルIPに対し接続を許可するつもりかい?

611:NAME IS NULL
08/04/17 20:40:54
>>607

そのうちわかるよw

localhostとかいろいろトライ。

612:NAME IS NULL
08/04/17 21:04:35
>>604
Mickosがはっきり否定してるぞ
URLリンク(developers.slashdot.org)

It is not a quesiton of close sourcing any existing code,
nor anything in the core server.
Everything we have released under GPL continues to be under GPL,
and the core server will always be under GPL (or some other FOSS licence).

613:606
08/04/17 21:36:42 wr9HmqHR
>>609
ありがとうございます。
正規化は勉強しているつもりなんですが、気になったので上記の質問をさせてもらいました。
引き続いての質問で恐縮ですが、

SELECT 受注表.納品日,商品表.商品名
FROM 受注表,商品表
WHERE 受注表.納品日 = '20010401'
AND 受注表.商品コード = 商品表.商品コード ;

とあるとき、受注表テーブルまたは商品表テーブルのどちらかがカラの時は
何も結果が返ってこないと考えていいのでしょうか?
かりに商品表テーブルがカラの時、「受注表.納品日」だけでも
戻ってくるということはないと考えていいのかな、と。
ためしに似たようなものを実行して試したんですが、何も戻ってきませんでした
自分のテストミスなのか・それでOKなのかわからないので教えてください すみません

614:606
08/04/17 21:43:59 wr9HmqHR
すみません >>613
>ためしに似たようなものを実行して試したんですが、何も戻ってきませんでした
という部分ですが、
WHERE 受注表.納品日 = '20010401'
AND 受注表.商品コード = 商品表.商品コード ;
はもちろんのこと、二行目を削除して
WHERE 受注表.納品日 = '20010401';
だけでやっても何も戻ってきませんでした
こういうものなんでしょうか?

615:NAME IS NULL
08/04/17 23:40:59
GPLなのにclosedに出来るの?

616:NAME IS NULL
08/04/18 03:12:10
MySQL、新機能追加は有償版の「MySQL Enterprise」だけを対象に
URLリンク(www.technobahn.com)

Linuxを代表するオープンソースベースのリレーショナルデータベース管理システムのMySQL
が近くソースコードの公開を停止する方向で準備を進めていることが16日、米カリフォル
ニア州サンタクララで開催中のMySQLコンファレンスの席上で明らかとなった。


617:NAME IS NULL
08/04/18 06:10:56 KIEogQYQ
MySQLオワタ

618:NAME IS NULL
08/04/18 06:49:14
Sunノバビッチ!

619:NAME IS NULL
08/04/18 11:28:11
すみません、ご教授いただきたいのですが、

◆現状
XOOPS使用の為、MySQL4.0.27を文字コードEUCで稼働

◆やりたいこと
→1台のサーバで、XOOPS・OpenPNEの稼働

◆困っていること
→OpenPNEが文字コードUTF-8の為、文字コードUTF-8のデータベースを用意しなければならないが
  1台のサーバに入っているMySQLで、データベースごとに文字コードを変えられるか分からない

宜しくお願い致します。

もう1台別のサーバを用意して、そっちでUTF-8のMySQLを用意した方が無難ですかね・・・

620:NAME IS NULL
08/04/18 12:30:23
>>619
変えられる

621:NAME IS NULL
08/04/18 12:33:57
>>614
受注表.納品日 = '20010401' にマッチするデータあるの?
リレーションの前に1テーブルで自在にクエリできるようになれば。

622:619
08/04/18 12:45:41
>>620
ありがとうございます。

すみません、教えて君で申し訳ないのですが、がんばってググってはみたのですが、
どうも目的の事象を見つけられず具体的にはどうしたらいいのか分からず困ってます。
普通に CREATE DATABASE `DBNAME` DEFAULT CHARACTER SET utf8 ; でいいのかと思ったのですが、
ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT CHARACTER SET utf8' at line 1
と、エラーを吐かれてしまって・・・

宜しくお願い致します。

623:NAME IS NULL
08/04/18 13:08:05
>>622
データベースは
create database hoge character set 'utf8';
テーブルは
create table hoge (.. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


624:619
08/04/18 13:48:35
>>623
ありがとうございます。

create database hoge character set 'utf8'; で、やってみたのですがダメでした・・・

エラーは同じ、
ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'character set 'utf8'' at line 1
です。

最初のインストール時のオプション指定が影響したりとかってしますか?
ちなみに、こんな感じでインストールしてます。

./configure \
--prefix=/usr/local \
--localstatedir=/var/mysql/data \
--with-mysqld-user=mysql \
--enable-assembler \
--with-mysqld-ldflags=-static \
--with-client-ldflags=-static \
--disable-shared \
--enable-local-infile \
--with-extra-charsets=all \
--with-charset=ujis \
--with-collation=ujis_japanese_ci \
--without-debug \
--without-bench

宜しくお願い致します。

625:NAME IS NULL
08/04/18 14:31:30
>>624
うちは5.0だけど、
create database hoge ; で、データベース作成時には何も指定無しで、
create table hage (....) Engine=MyISAM CHARSER=utf8 ; で出来ないか?
(うちはそれで、Serverデフォルトutf8、特定のテーブルのみcp932で動いてるよ。)

626:614
08/04/18 16:21:37
>>621
ありがとうございます
>受注表.納品日 = '20010401' にマッチするデータあるの?
あります。
あるなら、まともにクエリ成功してるはず と考えて良いのでしょうか?
僕の操作ミスかな?

627:NAME IS NULL
08/04/18 18:20:04
すいません、カラム名を変更したいのですがどなたかご教示いただけないでしょうか。

バージョン:mysql5.0
db:test
table:tabletest
column:key,colum1,colum2
という構成にしています。

colum1をcolumn1に名前を変更したいのですが、
alter table tabletest change colum1 column1;
と入れても

ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
と、エラーが出ます。構文が間違ってると言われているようなのですが、
マニュアルサイトでは
mysql> ALTER TABLE テーブル名 CHANGE 古いカラム名 新しいカラム名;
と記載されておりどこが間違っているのかわかりません。
お願いします。

628:NAME IS NULL
08/04/18 18:52:52
すいません、末尾にデータ型を付け足したら変更できました。

629:NAME IS NULL
08/04/18 21:38:16
質問させて下さい。
Ubuntu7.1 serverとMySQL5.0.45を使っています。
データのインポートが異常に遅いのです。
以前まではx86版Ubuntuを使っていましたが、64bit版に変えました。
以前と設定もハードウェア構成もは全く同じなのです。
前もってphpmyadminを使ってエクスポートでとっておいたgzip圧縮のSQL文によるバックアップを
現環境のMySQLにインポートしているのですが、インポート実行時間が以前の50倍くらい遅くなっています。
時間をかければインポートできますが、大きめのデータだと何日まてばよいかわからない状況です。

topコマンドでは常にCPU100%でロードアベレージも1です。
メモリは8Gあって空きはまだ4G以上あります。
DBは全てinnodbです。
phpmyadminのランタイム情報を見ると、SQLの実行に関して
失敗回数 1,084 785.67 95.93%
と出ています。
もしかして失敗によるコミットとロールバックを繰り返しているから遅いのかなと思ったりもするのですが
原因がわからずにほとほと困り果てております。

もし宜しければお力添え頂けないでしょうか。
宜しくお願い致します。

630:NAME IS NULL
08/04/18 22:06:28 qYojHQc3
今月〜来月の間(1ヶ月間)と言うのを出したいと思っています。

PHPを使って今月と来月をdate関数で出して、範囲検索で抽出できると思いますが、
それをSQLだけでする方法ってありませんでしょうか?

631:NAME IS NULL
08/04/18 22:14:43
>>630
今月〜来月の間の「何を」出したいんだ?

質問をする前に人に分かる日本語を書くよう心がけてよ

632:NAME IS NULL
08/04/18 22:21:54
せめて表の構造くらい語ってくれよ…

633:630
08/04/18 22:32:10 qYojHQc3
>>631
申し訳ないです。。
登録されているdateにたいして、
「今月」〜「来月」という値を抽出したいと思っています。

考え方としては
WHERE date BETWEEN '2008-04-01' AND '2008-04-30'

みたいなSQLでその期間内のデータを抽出できると思いますが、
「2008-04-01」「2008-04-30」という範囲の値を、SQLで出せないかと思っています。

634:NAME IS NULL
08/04/18 23:03:17
>>633

それで伝わると思ってるのか。

635:NAME IS NULL
08/04/18 23:55:05
>>633
ヒント
DAYOFMONTH(), CURDATE(), ADDDATE()

そういう質問・説明の仕方を仕事でやると怒られないかい?
前提を省いた説明というのは基本的にはしてはいけないよ。


636:NAME IS NULL
08/04/19 12:10:52
>>616
ガセネタ紹介乙

637:NAME IS NULL
08/04/19 14:26:10
>>630の情報だけで答えられない奴は仕事には向いてない。
実務になったらこんな聞き方するクライアントばっかりだぞ?

638:NAME IS NULL
08/04/19 14:31:55
お客さんが説明下手なのは、そりゃしょうがない。

639:NAME IS NULL
08/04/19 14:34:50
>>637
じゃあ今日は特別に 君に答える権を授けよう

640:NAME IS NULL
08/04/19 14:53:56
>>637
金払えよ

641:NAME IS NULL
08/04/20 22:18:25
FreeBSD で
MySQL5.051a を使用しています。
WordPressの初期設定をしているのですが、
以下の部分で止まってしまっております。

# mysqladmin -u root password XXXXXX
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'


どなたか助言をいただけませんでしょうか?
宜しくお願い致します

642:NAME IS NULL
08/04/20 22:29:02
>641
rootのpasswordをきちんと設定してますか?


643:641
08/04/20 22:50:37
>>642
回答ありがとうございます。
rootのパスワードの設定は以下で問題ないですよね?
(エラーが出てしまっております)
%mysqladmin -u root password xxxxxxx
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)



644:NAME IS NULL
08/04/20 22:56:13
URLリンク(www.ksknet.net)

このあたりを参考にするとか、ググってみるとか。
MySQLのrootパスワードは結構面倒でした(汗)


645:641
08/04/21 10:25:56
>>644
すんません。
パスワード設定したのを忘れてましたorz

646:NAME IS NULL
08/04/21 18:24:30
>>624
今更だけど、utf8のサポートはMysql 4.1以降。
だから、4.0でエラーが出るのは仕方ないと思う。

647:NAME IS NULL
08/04/23 19:06:36
質問です。バージョンはMySQL 3.23。

時刻を示す文字列が格納されたフィールドがあります。
2008年4月23日19時30分00秒なら、「20080423193000」という感じ。

このフィールドを見て、例えば現在から1ヶ月以内のレコードを抽出するとき、
どのようなクエリを送るのがスマートでしょうか。


WHERE 0+DATE_SUB(NOW(),INTERVAL 1 MONTH) < date AND date <= 0+NOW()

このようにやって期待通りに動いているようには見えるのですが……。


648:619
08/04/23 19:27:01
>>646
ありがとうございます。

文字コードのサポートとは・・・まったくノーチェックだった

649:NAME IS NULL
08/04/23 22:22:01
>>647
素直にdatetime型にする

650:NAME IS NULL
08/04/23 22:33:33
>>647
この先色々なバグに悩まされるのが目に見える設計ですね

651:NAME IS NULL
08/04/23 23:13:59
テーブル設計したの俺じゃねーもんっ!

652:NAME IS NULL
08/04/24 00:32:04
も、萌え

653:NAME IS NULL
08/04/24 09:31:08
>>647
>>649に1票。Datetimeにしたほうが何かと便利じゃね?

654:NAME IS NULL
08/04/24 11:00:03
他で散々使われてるテーブルだからなあ……現状ちゃんと動いてるものを弄りたくないw

655:NAME IS NULL
08/04/24 14:49:32 6a37T5mr
質問です
ヤフーでもAmazonでも、大きなポータルみたいなサイトを見ると、トップページに
沢山メニューやカテゴリがあります
(新着、トピック、ニュース、メール受信数、広告などなど)
これは、各領域ごとにSQLの読み込みしてるってことかなと思いますが、一ページに
どの程度リクエスト仕掛けていいんでしょう?
全部をまとめて1リクエストで済ませてるわけじゃないですよね?
そんなにいっぱい一気に読み込んで大丈夫なの?って気になりますが、、
こういうのはメモリとかCPU性能に依存するものなんですか?

変な質問ですみません 
今のところ、1ページ1処理はうまく出来てるんですが、負荷を
沢山かけるものは心配です
参考になるサイトや書籍などあればそれも教えてください お願いします

656:NAME IS NULL
08/04/24 14:55:16
それがノウハウというやつでして

657:NAME IS NULL
08/04/24 15:17:51 ZBZQUXh5
質問させて下さい。
table1
---------------------------
no   cat   name
1    1    わかめ
2    3    だいこん
3    2    にんじん
4    2    にく
5    3    こめ
6    4    かいわれ
....
100   100   にがうり
---------------------------

このようなテーブルで各catから一つずつnameを取得したいのですが、
その時に、noの降順を使って取得するにはどのようにすればよいでしょうか?

以下のように取得したいのです
---------------------------
no   cat   name
1    1    わかめ
4    2    にく
5    3    こめ
6    4    かいわれ
---------------------------

上手く伝えられているか不安なのでもう少し書き足しますと
---------------------------
no   cat   name
3    2    にんじん
4    2    にく

のようにcatにおいて重複した結果が出たときにnoの降順に従って
4    2    にく
だけを取得してほしいのです。

以下のようなクエリを実行したのですが、これではnoの降順を無視してグループ化されてしまいます。
SELECT
`no`,
`cat`,
`name`
FROM
`table1`
WHERE
1
GROUP BY `cat`
;

具体的なテーブル構造は下記になります。
CREATE TABLE `table1` (
`no` int(10) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'No',
`cat` int(4) NOT NULL default '' COMMENT 'カテゴリ',
`name` varchar(32) NOT NULL default '' COMMENT '名前',
`up_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新日時',
`del_flg` TINYINT NOT NULL DEFAULT '0' COMMENT '削除フラグ'
) ENGINE = myisam CHARACTER SET ujis COLLATE ujis_japanese_ci COMMENT 'テーブル情報';

どうか宜しくお願い致します。

658:NAME IS NULL
08/04/24 15:34:13
SELECT T1.no, T21cat, T2.name FROM
(SELECT max(no) AS no, cat FROM table1 GROUP BY cat) T1
INNER JOIN table1 T2 ON T1.no = T2.no AND T1.cat = T2.cat;

とか?
試してないけど。

659:655
08/04/24 15:43:59 6a37T5mr
ノウハウってことは社外秘みたいな?
ごくごく基礎的な考え方について、まとめてる本なんて知りませんか?
すみません、気になるんです。。

660:NAME IS NULL
08/04/24 15:50:26
ああいうでかいポータルは1アクセス毎に動的にSQLを発行しているのではなく、
静的HTMLを一度作る時だけSQLを発行しているから無問題。

SQLの結果をキャッシュしておきたければmemcacheを使え。

661:657
08/04/24 16:00:29
>>658
レス有り難う御座います。
うおっ結構複雑になってしまいますね・・・
今から提示して頂いたクエリを一つ一つかみ砕いて勉強してみます。

>>655
660さんもおっしゃっているような感じのことがメインですが
WEB+DB PRESS Vol.42にニコニコ動画の技術記事があります。
そこにDBとWEBアプリケーションサーバの大規模運用における勘所みたいなことが結構書かれていて
私は勉強になりました。
お力になれれば幸いです。

662:NAME IS NULL
08/04/24 16:29:19
分かってると思うけど、T21catはT1.catのtypoね。
試してみたらうまくいったけど、あんまりいい方法ではないよ。
あくまで、答がちゃんと出るレベル。

663:658
08/04/24 17:37:55
SELECT no, cat, name FROM table1 T1
WHERE NOT EXISTS(
SELECT * FROM table1 T2 WHERE T1.cat = T2.cat AND T1.no < T2.no
);

とかでもOK

664:NAME IS NULL
08/04/24 19:47:59
>>659
ノウハウは社外秘まではいかないだろうけど、それが飯の種ってもんです。
何でも知ってる人に聞いてみましょう。

本だったらSQLの簡単なものから読んだらいいんじゃないかな。
MySQLに限らず、RDBMS共通で勉強するといいかも。

665:655
08/04/25 06:21:05
>>660
ありがとうございます、一度読み込んだ後にキャッシュする機能があるんですね
それが知れただけでもすごく助かりました
>>661
本の紹介、ありがとうございます
ニコニコの仕組みは勉強になりそうですね! ぜひ読んでみたいと思います ありがとう
>>664
完全独学でまわりに詳しい人いないのでここで聞かせてもらいました
またお世話になると思います、よろしくお願いします

どうもありがとうございました

666:NAME IS NULL
08/04/25 22:05:36 mG3NM/VW
副問い合わせが出来ないサーバ(MySQL4.0.25です)を使うことになったのですが、
副問い合わせをにしたいSQL文があり困っています。

この場合、どういうSQL(関数)で代替するのでしょうか?

667:NAME IS NULL
08/04/25 22:22:40 c14dphK1
>>666
泥臭いやり方だが、temporary tableかな
またはアプリケーション側で処理するとか

668:NAME IS NULL
08/04/25 23:01:57
JOIN

669:666
08/04/25 23:09:52 mG3NM/VW
>>667
すみません、、ちょっとやり方が見えないのですが、、
例えば以下のようなSQLの場合、どうなるのでしょうか?

SELECT * FROM hoge INNER JOIN(
SELECT hoge_id FROM test
) AS test ON hoge.hoge_id=test.hoge_id

670:NAME IS NULL
08/04/25 23:18:07
SELECT * FROM hoge
  INNER JOIN test ON hoge.hoge_id=test.hoge_id

サブセレしなくても普通にこれでいんじゃないの。
それとも例題のために削ってるから?

671:666
08/04/25 23:20:34
>>670
例題の為に削っているからです。。
実際、副問い合わせが必要な時は、そこでCOUNTしたり
WHEREで抽出した値を出したいから、という理由が多いです。

672:NAME IS NULL
08/04/27 13:21:26 Tqt++e11
すごい初歩の質問なんだけど、
select * from web where name ='2chan' and category = '2chan' and type = '2chan'
って漢字で、全部2chan(同一単語)で検索したいんだけど、
where以降を縮める方法ってないですか?
PHPのifみたいにフィールド名括弧で括って()='2chan'でもだめだし・・・。
初歩すぎるのか探してもなかなか見つからない。

673:NAME IS NULL
08/04/27 16:05:58
むり

674:NAME IS NULL
08/04/27 16:24:11 Tqt++e11
>>673
簡潔な回答ありがとうございます。

675:NAME IS NULL
08/04/28 00:32:12
'2chan' IN (name, category, type)

676:NAME IS NULL
08/04/28 03:35:46
TEXTカラムから
文字数1000文字区切り、最後の改行
でデータを取り出したいのですが可能でしょうか?

できれば1000文字以下で丸めこみたいです

以下のようにやっては見たのですがどうもすっきりしません。
よろしくお願いします。
SELECT
 CONCAT(SUBSTRING(TEXT,1,1000),SUBSTRING_INDEX(SUBSTRING(TEXT,1000,1000),"
",1)) AS TEXT
FROM hoge;

677:NAME IS NULL
08/04/28 09:10:45
>>675
INはORだろ

678:NAME IS NULL
08/04/28 10:01:14
>>676
1000文字取り出した後はプログラム側で処理してはいかがでしょう?

679:NAME IS NULL
08/04/28 12:53:41
>>671
だったら、そういうクエリを示さないと、解決にならない。

680:NAME IS NULL
08/04/29 16:57:15
Windows にインストールしようとしてバイナリを探して
このページを見たところ
URLリンク(dev.mysql.com)

ここだと 5.0.51b しかないようです。
b は beta の略ですよね?
beta 無しの一つ前のバージョンはどこでダウンロードできるのでしょうか?

681:NAME IS NULL
08/04/29 17:23:46
>>680
それはベータじゃない。リリース版。

ってかいつの間にか5.0.51bになっててきづかなかった。
5.0.51->5.0.51aの時はSSL絡みのバグ修正だったようだけど、
今回のChanges探したんだが見つからない。

bkbitsのほうにも、Enterpriseには5.0.60きてるけど、
Communityには5.0.51aまでしか記載がない。

682:NAME IS NULL
08/04/29 17:35:14
無償版の「MySQL Community Server」の提供は今後も継続されるが、
無償版と有償版の開発は完全に切り離されることとなり、
無償版と有償版の2つのMySQLはまったく別々の進化を遂げることとなる見通しだ。

683:680
08/04/29 18:00:49
>>681
レスありがとうございます。
URLリンク(dev.mysql.com)
ここのバージョンの命名規則に b の意味するところが書いてないようなのですが

51 -> 51a -> 51b は
51 -> 52 にするほどでもない細かい修正だと理解して良いのでしょうか?

684:NAME IS NULL
08/04/29 19:57:40
>>683
その通りです。

個人的にはbetaを意識させるbをバージョンに含むのには反対ですけどね。

685:680
08/04/29 20:17:13
>>684
なるほど、ありがとうございました。

686:NAME IS NULL
08/04/29 22:52:30 9aVChAdo
MySQL5.1のインストールで
Server Instance Configuration WizardのApply security settingで
エラーがでて完了しません
mysql.serversテーブルがないようなメッセージが出ています
ポートは開放しているはずですが、複数端末で同じようなエラーが出てしまいます
いろいろ調べたのですが、対処法がわかりません。
環境はwindowsXP SP2です

687:NAME IS NULL
08/04/29 22:56:35 vsezzVYU
mysqlのソースコードの解説したサイトとか書籍とか
オススメありませんか?

ググっても出てこないのでお願いします

688:NAME IS NULL
08/04/30 00:50:20
>>687
俺は読んでないけど…

URLリンク(www.oreilly.co.jp)

つーか、サイトや書籍を当たるよりもいきなりガシガシ
ソースコード読んだ方が速いんじゃないか

689:NAME IS NULL
08/04/30 01:04:19
Linuxもいつかは誰かの所有物になるのかな

690:NAME IS NULL
08/04/30 01:37:43
そんときは、別のオープンソースOSがLinuxの代わりになってるよ。


691:NAME IS NULL
08/04/30 01:41:19
Linux は正式にリーナスの物だけど誰も困ってない
そういう事

692:NAME IS NULL
08/04/30 01:46:55
>>688
ありがとうございます

なんと身近な本に普通に載ってたんですね…

693:NAME IS NULL
08/04/30 16:53:35 3+aSlCcR
selectする情報の中にorder byで並び替えた際の順番を入れたいのですが
どう書けば可能でしょうか?

694:NAME IS NULL
08/04/30 17:03:55
order byは最後に実行されるから、select句でその情報を取得するのは無理。

SELECT foo AS '2 foo', bar AS '1 bar' FROM Example
ORDER BY bar, foo;

とでもすればいいんじゃないかな?

695:NAME IS NULL
08/04/30 17:40:27
テーブルレイアウトがないので、、、テーブル名が sample_table で、
プライマリキーは key_a 並べ替えたいカラムを col_a として書きました。

SELECT
 a.*,
 b.order_num
FROM
 sample_table a
 JOIN (
  SELECT a.key_a, count(*) AS order_num
  FROM sample_table a LEFT JOIN sample_table b ON
  a.col_a > b.col_a
  GROUP BY a.key_a
 ) b
 USING (key_a)
ORDER BY a.col_a

MySQLでの確認はしてませんので、方言が混ざってそうだったら翻訳しといてください

696:NAME IS NULL
08/04/30 23:16:14 6t3erPxs
ExcelとMySQLに関する質問です。

Excelで数千行になる正規化されていないデータを、一気にMySQLに入れることってできるでしょうか?

普段、Excelにデータを溜め込んでいるのですが、それをサーバーに置いて、Web経由でデータの抽出ができるようにしたいんです。
もしいまのExcelのデータをすぐMySQLに入れられたら、造作無いのではないかと思っています。

よろしくお願い致します。


697:NAME IS NULL
08/04/30 23:38:08
列がちゃんと決まってるなら行番号あたりをキーにしたテーブル作って
COPY句でも作って突っ込めばいけるんじゃない?

698:NAME IS NULL
08/04/30 23:49:06
CSVで保存すれば、取り込める。
正規化せずに取り込むと後でものすごく後悔しそうないがする。


699:NAME IS NULL
08/05/01 01:12:40 V4TVtf8T
$sql = "select ホゲ from ホゲホゲ where ホゲホゲホゲ like '%$word%';";
$result = $db->query($sql);
if (DB::isError( $result )) {
die($result->getMessage());
}
while($row = $result->fetchRow()){
echo $row[0]; // 返却データをループ
}


という感じのプログラムを、テーブル名のみを変更して13行並べているのですが、最後の4つあたりが「DB Error: no such field」というエラーが出て正常に処理されません。
エラーが出ている箇所を上のほうに持ってくると解決するのですが、するとまた下の4つが・・・という感じです。
これって何が原因なのでしょうか?

700:NAME IS NULL
08/05/01 10:54:47
>>699
PHPのモジュールの問題じゃね?

701:NAME IS NULL
08/05/01 13:42:14
>>699
$db にfinishっぽい関数あったら、ループ後に呼んでみるとか

702:NAME IS NULL
08/05/01 13:59:30 /NYPxvw/
SQLのみを使って
mysqlの変数に
クエリの結果を代入する方法があれば教えてください

703:NAME IS NULL
08/05/01 21:04:05
質問です。

cpu:Core2Duo E6320
os:debian sarge
db:mysql 5

上記組み合わせで、このサーバをDB専用サーバーとして稼動させた
場合、mysqlのチューニングによってはCPUが最大で50%(1cpu)まで
しか使えない可能性ってありますでしょうか?

704:NAME IS NULL
08/05/01 22:57:20
きれーにするーされたな

705:NAME IS NULL
08/05/01 23:13:07
>>702
mysqlの変数って何?
ストアドファンクションを作ってるのかな。

>>703
smpのカーネルじゃないとそうなることもあるのかもしれない?
有識者の方お願いします。

>>704
何がしたいのか分かりません。

706:NAME IS NULL
08/05/02 11:35:50
>>702
select @name:=name from hoge;
select @name;

707:696
08/05/02 19:34:28 gVoO+8Lg
>>697
>>698
どうもありがとうございます。
参考になりました。


708:NAME IS NULL
08/05/02 22:12:33
MySQLの無料版ってなくなっちゃうんですか?

709:NAME IS NULL
08/05/02 22:14:32
無くならないよ

710:NAME IS NULL
08/05/03 03:45:01 UXm9qTN+
質問します カラムの値がNULLのものを削除したくて以下を実行しましたが
うまくいきません
delete from schedule where `evId` =''
delete from schedule where `evId` =NULL
両方ともだめです 何が原因として考えられるでしょう?
誰かご意見お願いします

711:NAME IS NULL
08/05/03 04:10:50
evId IS NULL

712:NAME IS NULL
08/05/05 05:16:45
データベースのフィールドの順番を変えるにはどんな命令を使うんでしょうか。
例えば

A B C D

となっているフィールドを

A C B D

にしたいんですが。

713:NAME IS NULL
08/05/05 06:08:56
変える必要なんてあるの?

714:NAME IS NULL
08/05/05 06:15:56
データファイル読み込むとき、フィールドの順番とデータの順番が逆になってたんで。

データのほうをいじってもいいんだけど、一応データベースの方も変えられるなら知っておこうと。

715:NAME IS NULL
08/05/05 11:01:12
まあ、速度的な面とかなら。


716:NAME IS NULL
08/05/05 12:41:16
DROP → CREATE

717:NAME IS NULL
08/05/05 18:14:35
>>712
alter table TBL modify B int after C
とか?


718:NAME IS NULL
08/05/05 21:18:24 umNt+46L
今までパスワードを暗号化せずにそのまま保存していたのですが、
次回の更新ではmd5で暗号化したパスワードを保存し、
その値でログイン出来るようにしたいと思います。

現状のパスワードをmd5化して更新する方法ってありませんでしょうか?
MySQLは4.1.22を使っています。

719:NAME IS NULL
08/05/06 01:21:23
>>718
update tbl set col=md5(col)


720:NAME IS NULL
08/05/06 03:26:20
>>1
ちわちわ

721:NAME IS NULL
08/05/06 14:56:41
巣に帰れ。

722:NAME IS NULL
08/05/06 19:58:26
ホスティング会社が3.23→5.0にうpグレードしやがった。
運用していたDBがオワタw

723:NAME IS NULL
08/05/06 20:05:41
>>722
アナウンス無しで?

724:NAME IS NULL
08/05/06 20:09:24
>>723
アナウンス無しで。
設定はしたから新規のデータは入るようになったけど、
古いデータが破壊されちゃった。

外国の安い会社だから、まぁ自己責任orz

725:NAME IS NULL
08/05/06 20:29:06
データ破壊てw
泣くわそんなん

726:NAME IS NULL
08/05/06 20:30:12
泣き虫は嫌いだ、じっちゃんも言ってた

727:NAME IS NULL
08/05/07 00:22:52
>>719
遅レスですけど上手くできました。ありがとうございました。

728:NAME IS NULL
08/05/07 13:33:51
参考サイトをみながらMySQLを勉強している者です。

サイトの説明どおり1ステップづつこなしていたのですが、サンプル用のバックアップファイルをDLしてきて自分の環境で復元するところでつまづいてしまいました。
バックアップファイル内の命令文を1文づつ手作業で打ち込んでいったところ、
CREATE TABLE T01Prefecture (
PREF_CD INT,
PREF_NAME VARCHAR(10),
PRIMARY KEY (PREF_CD)
);
を打ち込んだところで、
ERROR 1005 (HY000): Can't create table 'sampledb040.t01prefecture' (errno: 121)
というエラーが表示されました。

テーブルが作成できないというエラーのようですが、原因がさっぱりわかりません。
テーブル名をT10Prefectureに変えると作成できるのですが…
どなたかこのエラーの原因をお知りでしたら、ぜひお教え願えないでしょうか?

729:NAME IS NULL
08/05/07 14:28:12
普通はリダイレクト使ってやるような作業だよね
どっかで打ち間違えたんじゃないの?

730:NAME IS NULL
08/05/07 15:20:47
文字を打ち間違えた場合だと、T01prefectureをT10prefectureに変えても通らないはずだと思うのです。

ググっていくつかのサイトを見てみましたが、以前同じ名前のテーブルを作成した事があるのが悪い…のかな?
同じエラーで悩んでいるらしき人のBlogなどは見つかるのですが、何がどう問題なのか理解が及ばない。

731:NAME IS NULL
08/05/07 16:37:15
>>730
既にその名前のテーブルが存在するなら作れないですよ。

732:NAME IS NULL
08/05/07 18:27:43
DROP TABLE T01Prefecture;

733:NAME IS NULL
08/05/07 22:32:39
バックアップファイル内に予めテーブルを削除する文も入っているんです。
後出しでホントすみません。
URLリンク(mysqlweb.net)
のリンクにある040backup.zipというファイルなのです。

前のステップでsampledb040を使った練習があったけど、やはりこれのデータが変な風に残っているのでしょうか?


734:NAME IS NULL
08/05/07 23:16:52
リダイレクトでファイル直接流してみなよ

735:728
08/05/08 14:39:58
ご、ごめん。
最初は参考サイトにあるとおりリダイレクト(でいいのかな? Mysql -u ユーザー(root) -p データベース名 <"パス")とやってたのです。
それでテーブルを作成できませんというエラーがでるので1行づつ手打ちしてみたのです。

後出しばかりでホントごめん。
人に相談するには早すぎました。まともな説明ができるようになるまでは独学でがんばります…

736:NAME IS NULL
08/05/08 21:38:34
>>735
drop したあと、ほんとにdropできてるか確認してみるとか?

テーブルの作成権限がないだけかもしれないけどMySQLのその辺は
詳しくないので、もしそうなら他の人にお任せします。

737:NAME IS NULL
08/05/09 13:39:41
MySQLのトリガーって他のテーブルに対して処理できないって本当ですか?

738:NAME IS NULL
08/05/10 11:00:09
>>737
うそです

739:728
08/05/10 12:14:55
MySQLのdataフォルダ内にあるsampledb040フォルダを削除し、データベースを作詞するところからやり直したらテーブルが作成できました。
お騒がせしてすみませんでした。

こんな解決方法で良いのかな…?

740:NAME IS NULL
08/05/10 20:35:52
LOAD DATA LOCAL INFILEを使うときの、ローカルPC側のファイルパスの指定の仕方って、

"c:\hoge\hoge.txt"
"c:/hoge/hoge.txt"

これ以外に指定方法ってあるんでしょうか。
どちらでやっても、not found (Errcode: 2) になってしまいます><

741:NAME IS NULL
08/05/10 21:25:53
hogeディレクトリーにhoge.txtが本当に存在してるかい?

742:NAME IS NULL
08/05/10 21:26:01
>>740
\の場合は\\と書かないとダメな気がする

743:740
08/05/10 21:42:07
>>741
存在してます。

>>742
\\でやってみましたが、同じくnot foundでした。

ちなみに、xserver(共用レンタルサーバ)上のDBにLOADさせようとしているんですが、
気になっているのが、LOADするファイルはUTF-8なんです。
ところが、xserverのMySQLのcharacter setはujis、character setsは
latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru
latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek
win1250 croat cp1257 latin5 で、utf8がないんですよね。

phpMyAdminで、ALTER TABLE テーブル名 CHARACTER SET utf8; を指定した後に
実行しても結果は同じエラー。
phpでプログラムを組んで、クエリ発行前に"SET NAMES utf8"をやっても同じエラーでした。

ためしに、LOADするファイルをujis、テーブル側もALTER TABLEやSET NAMESでujisに設定してやってみましたが、同じエラーでした。
MySQLのバージョンは4.0.27です。

いろいろ調べてるのですが、解決策が見つからなくて。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5400日前に更新/244 KB
担当:undef