トップページ⇒php
988コメント357KB

mysql ヘルプ!

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。02/01/22 16:08ID:kMbsTQE3
リモートから家(常時接続)のmysqlサーバにつなげません
状況を詳しく書きます
PHPが動くプロバイダーのディレクトリにおいた自分の家の
mysqlサーバを操作するPHPに
$db = mysql_connect("mysqlサーバのip:3306","ゆーざ","ぱす");
と書いたのですが、駄目でした。
どうすればいいのでしょうか?
0930nobodyさん05/03/18 22:38:57ID:???
クエリなんてレスポンス重視で書けばいいんだよ
0931nobodyさん05/03/18 23:41:11ID:???
効率的≒美しさ
0932nobodyさん05/03/18 23:45:27ID:???
論理的な美しさにはこだわって欲しいが、見た目の美しさは割とどうでもよい
0933nobodyさん05/03/19 02:39:53ID:???
こぴぺした時に問題が発生しにくいっていうのは作業量によっては利点となるな
0934nobodyさん2005/03/23(水) 03:45:21ID:???
コーディング規則はいろいろってことで
0935PHP初心者2005/03/24(木) 00:01:54ID:vk1AucmH
id | name | rosen1 | rosen2
1 | 山田 | 山手線 | 中央線
2 | 田中 | 埼京線 | 山手線
3 | 加藤 | 総武線 | 京王線

山手線を使用している人を表示したい場合など、
複数のフィールドからの検索は可能でしょうか?

rosen1から山手線を検索して表示する場合は、
select * from aiueo where rosen1 like '山手線'
とすれば山田さんが表示されるのですが、
rosen1とrosen2の両方から検索し、山田さんと田中さんを表示させることは可能でしょうか?
0936nobodyさん2005/03/24(木) 05:24:05ID:???
>>935
or
0937PHP初心者2005/03/24(木) 17:13:57ID:aYVGSrBn
936さん、ありがとうございました。
「or」で上手くいきました!
0938nobodyさん2005/03/25(金) 18:57:02ID:???
A、B 共にユニークではないフィールドがあります。
このA、Bの組み合わせをユニークにすることはできますか?

現状、
1、SELECT の where a=A AND b=B で行数を取得。
2、1が0ならINSERT。
のようにしていますができたら1回だけでINSERTしたいのですが、、、
0939nobodyさん2005/03/30(水) 11:51:00ID:???
>>938
それってAとBの中身によるんじゃないの。
例えばAの3番目と5番目のレコードが同一でユニークになっていなくてそれ以外はユニークで、
Bも3番目と5番目のレコードが同一でユニークになっていなくてそれ以外はユニークな場合、
AとBを組み合わせた時3番目と5番目が同一のものになりユニークにならない。
でも例えばBが2番目と4番目のみが同一な場合はユニークになるけどね。
ただしAとBでおよそ被らないであろう全く異なるデータを扱っているという前提で、だが。
同一レコードが何番目にあるのかをABそれぞれで調べて被ってないかを調べればユニークになるかどうかは分かる。
0940nobodyさん皇紀2665/04/01(金) 22:01:15ID:???
april
0941nobodyさん2005/04/02(土) 10:44:26ID:ftpZSEGb
auto_incrementじゃないintのprimary keyで、
レコードが追加される時に
このプライマリキーを用いた降順あるいは昇順にソートして追加していきたいんだけど
mysqlにこれをやってくれる機能はありますか?
0942nobodyさん2005/04/02(土) 13:06:49ID:???
max ○○
0943nobodyさん2005/04/02(土) 20:10:05ID:???
>>941
RDBのテーブルはINSERT時に格納順序を指定することはできない
順序はSELECTするときに指定するもの
0944nobodyさん2005/04/05(火) 09:09:14ID:R5kNClWz
intのprimary keyフィールドがあり、
検索条件に該当するレコードがprimary keyの特定の範囲内にしか存在する可能性が無いと分かっている時、
その範囲を検索条件で指定する事は出来ませんか?
検索回数の減少に繋がると思うのですが。
09459442005/04/05(火) 09:18:22ID:???
付け足し。
単純にwhere primarykey > 下限 and primarykey < 上限とすると、
全てのレコードに対してこの条件に一致するかが比較されてしまいそうですが、
直接下限から上限の間のprimarykeyのみに絞って比較を行いたいという事です。
indexを作成しておけば2行目の条件式で4行目の処理をmysqlが自動的にやるんでしょうか。
0946nobodyさん2005/04/05(火) 11:26:06ID:???
以下の処理をmysqlで行う事は出来ますか?
縦がフィールド横がレコードと見た時の1マスに複数のデータを持たせて、
検索時に複数レコードがヒットした時に、被っているデータはまとめて出力したいのです。
レコード1のAフィールド{1,2,3,4,5}
レコード2のAフィールド{3,4,5,6,7}
とある時、レコード1と2がヒットしたらAフィールドの内容として{1,2,3,4,5,6,7}と出力したいという事です。
{1,2,3,4,5,3,4,5,6,7}と単純に内容をつなげて出力するのであれば、
各データをコンマで区切った文字列として入力してあるものを繋げて出力するだけで済みそうですが、
まとめて出力する方法が思いつきません。
これに相当するような処理でも構わないのですが何か方法はあるでしょうか?
0947nobodyさん2005/04/05(火) 16:53:51ID:???
>>944-945
整数型のカラムだったら単純に、インデックスを張る=効率的に検索してくれる
と考えてオーケー。

それよか SQL には between という指定方法もあることを覚えておいてほしい。
0948nobodyさん2005/04/05(火) 17:02:09ID:???
>>946
1マス…っていうか1カラムに複数のデータを突っこむのは
RDBの特長や性能を殺すようなものだからやめといたほうがいい。
その例だと本来は10レコードになるように表を設計する。

そうしておけば重複をまとめるのは distinct で一発でできる。
0949nobodyさん2005/04/05(火) 17:29:54ID:???
>>946
セパレータで結合する関数はあるが分割する関数は無い(と思う)から無理じゃね
PHPとかと組み合わせたら何でもできるけど
0950nobodyさん2005/04/05(火) 19:45:52ID:???
文字列型だと255文字以上使えて、10進数で255桁以上も表せるのに、
数値型だと符号なしbigintでも20桁しか使えない。(40桁くらいの数字を扱いたいのに・・・)
なんで?
文字型は数字以外の文字もカバーしてる分、余計にデータが長くなると思うのだけど。
たぶん数値型は内部では2進数で直接数量が表されてるよね?
もしそうだったら文字型よりだいぶ短そうなのに。
色んな演算を加える可能性があるから数値型は短いものしかダメなのだとしたら、
演算をしないけども数字ばかりのデータを扱う場合は文字列型が適してる?
0951nobodyさん2005/04/06(水) 07:35:39ID:???
>>950
ちなみに40桁の数字って何で使うものなの。天文学?
0952nobodyさん2005/04/06(水) 08:41:59ID:???
>>950
「何で?」つうかデータベースは今も昔も
別に学術的な数値計算を行うシステムではないので。
データベースに限らず今のマイクロプロセッサの設計に置いてもね。

SQLでどうしてもやりたいなら、MySQLのユーザ関数に計算ライブラリを
組み込む手もあるが、データベースは単にデータを蓄積するものとして、
(ここはWebProg板だし、それっぽく)PHPのGMP関数で処理するのが良いんじゃね。
0953nobodyさん2005/04/06(水) 09:43:35ID:???
>>950
なんでという理由なら一般のCコンパイラの整数値が
long 型の、-9223372036854775808 〜 9223372036854775807 の範囲までしか扱えないから
でしょう
0954nobodyさん2005/04/07(木) 12:34:57ID:M6scFfsm
複数の同様なフィールド構成のテーブルの中からいくつかのテーブルを選び検索をしたいのですが、
select field from table1,table2,table3;
という記述ではemptyしか出ません。
このような記述では出来ないのでしょうか?
それと、mergeテーブルというものがあるようですが、MyISAMにしか対応していないようで、
トランザクションセーフで無ければならないので困っています。
0955nobodyさん2005/04/07(木) 13:29:43ID:???
>>954
各テーブルごとに検索を繰り返すしかないと思う
0956nobodyさん2005/04/07(木) 18:10:36ID:???
>>954
unionとか
0957nobodyさん2005/04/09(土) 12:13:03ID:???
mergeテーブルの中の動的な複数のテーブルを通してauto_incrementされるフィールドを作る事は出来ますか?
レコードが追加される可能性のあるテーブルが一つで他は静的なテーブルであればやり方が分かるのですが、
全てのテーブルにレコード追加の可能性がある場合です。
0958nobodyさん2005/04/10(日) 20:55:02ID:???
update table set field = field.string where no = int;
と書いてみたのですがfield = field.stringのところでエラーが出ます。
field = field.'string'等も試したのですがダメでした。
文字列を追加するにはどう記述すれば良いのですか?
0959nobodyさん2005/04/11(月) 08:47:21ID:???
>>958
文字列の結合?
concat()でできないですか。
0960nobodyさん2005/04/11(月) 13:48:48ID:???
>>959
出来ました。
ありがとう!
0961nobodyさん2005/04/11(月) 15:04:52ID:AZghOiam
PHP+mysqlで、and検索をやってみようと思って考えたのですが、

POSTで受け取ったスペース区切りキーワードをexplodeして、

for($i=0;$i<$countKey;$i++){
$wheresql .= "search like '%{$keyArray[$i]}%' and ";
}
(search=検索ワードを詰め込んだカラム)
って感じで繋いで、where $wheresqlしたんですが、結果は通ってうまくいくときはあるんですが、結果0になったり、それらのワードが含まれてるのに出ないレコードがあったりします。。

どこか根本的に間違っているのでしょうか・・・。
and検索って普通どうやってやるんですか?
0962nobodyさん2005/04/11(月) 15:33:57ID:???
>>961
スペースが連続したり全角スペースの場合を考慮すれば、preg_split()が望ましいと思う。
あとはforeachとかで回しながらqueryを作ればいい。
likeと%の意味は理解してるかな?
09639612005/04/11(月) 16:21:22ID:???
>>961
ありがとうございます。
一応
$keyword = str_replace(' ',',',$keyword);
$keywords = str_replace(' ',',',$keyword);
こんな感じで全半スペースを,に変えてexplodeしてました。

likeは、パターンに一致、前後%%は前後に〜○○〜と続く、みたいな意味でしたっけ。。
それだと、前に何もない文字列が引っ掛からなくなりますか・・・ためしに、loopで回す文字列を

$wheresql .= (search like \"%{$keyarray[$i]}%\" or search like \"%{$keyarray[$i]}\" or search like \"{$keyarray[$i]}%\") and "
にしてみましたが結果変わらず・・・。
0964nobodyさん2005/04/11(月) 20:03:55ID:zHJjbS9v
mysqlの全文インデックスについて、対象となる文字コードは限定されているのでしょうか?
0965nobodyさん2005/04/11(月) 21:07:58ID:???
>>964
文字コードは特に限定はされてなかった筈。ただ単語と認識するのが
スペースでセパレートされてるワードだけなんで、
そういう作りではない言語(日本語とか韓国語とか中国語とか)には
そのままでは使えない。
0966nobodyさん2005/04/12(火) 00:26:29ID:FxpxEm5t
like検索で、私も苦しんでいます。
私の環境は、PHP(4.3.10) + MySQL(3.23.58)、文字コードはEUCです。

2バイト文字を含む部分一致のlike検索において、以下のような問題が起きます。
「L」(全角のエル)を検索した場合に、「藤木」を含む文字列にヒットします。
原因は、Lをあらわす文字コードが、藤木の藤の後ろ半分と、木の前半分を同じ
であることでした。
binaryにすれば大丈夫という話を見かけたので、この2バイトの文字列は、
それまでtext型で持っていたのですが、BLOB型にしました。

like検索の高速化を図った4.X系列では2バイト文字列を考慮していないため、
こういう症状が出るバージョンがあると見たのですが、3.23.58もそうなのでしょうか?
解決策があるなら、ご紹介いただければ、幸いです。
0967nobodyさん2005/04/12(火) 09:45:57ID:???
PostgreSQL なら簡単なのに
0968nobodyさん2005/04/12(火) 15:23:41ID:6tLufYli
mysql4.024なんだけどカラム名を日本語にしても問題ない?
0969nobodyさん2005/04/12(火) 20:03:28ID:???
PHP+MySQLで、
SELECT * FROM table WHERE id=1というクエリを実行した時、
id=1のデータは無いのに検索に成功し、エラーを吐かずに処理を続行してしまいます。
同じ処理をPerlで行った時は成功するのですが何が原因なのでしょうか?

環境はWin+Apache1+PHP4+MySQL4.0.18
文字コードはスクリプト、データともEUCです。
0970nobodyさん2005/04/12(火) 21:26:03ID:???
データがないときの処理とかをphpで条件分岐させれば
よいのでは。それ以上はわかりません(素人でつ)。
0971nobodyさん2005/04/12(火) 21:40:38ID:???
>>969
> SELECT * FROM table WHERE id=1というクエリを実行した時、
> id=1のデータは無いのに検索に成功し、エラーを吐かずに処理を続行してしまいます。

検索に成功した。(ただし、Hitしたのは、0個。)
こういう結果が返ってきてる。

つまり、アルゴリズムが変。つーか、MySql関数が返す値をマニュアルで調べるべし。
0972nobodyさん2005/04/13(水) 00:09:23ID:P5BMPkuz
フィールド、テーブル、データベース等が削除された時に、
そこに使われていたインデックスも削除されるんですか?
0973nobodyさん2005/04/13(水) 00:29:48ID:???
>>972
意味不明
09749692005/04/13(水) 00:51:56ID:???
>>970-971
返信ありがとうございます。解決できました。
エラートラップにorを使っていたのが拙かったようです。
if文に変えたら正常に動作しました。
09759692005/04/13(水) 01:30:22ID:8dY+nynK
と思ったら全然関係ありませんでした。
もしかしてmyslq_queryの成否って検索結果とは関係ありませんか?
クエリでたらめにしたらエラートラップ引っかかりました。
検索結果に対しては別にエラー処理を考える必要があったってことですね。
0976nobodyさん2005/04/13(水) 03:20:49ID:???
mysql_num_rows() でええやん
0977nobodyさん2005/04/13(水) 03:24:39ID:???
>>975
そうだよ。

クエリーとは、データベースに対して、これこれこういう条件のデータを探してくれ、という”問い合わせ”の事だ。
これに対して、データベースは、こんなんが有るよ。あるいは、そんなの無いや。等を返す。

つまり、クエリー(問い合わせ)は”成功”している。”無いよ”と言うのも立派な答えだ。

mywql_queryがエラーを返すのは、”問い合わせ方がおかしいだろ!”とか、"そんなテーブルなんてねーよ!"ってな時だ。

マニュアルを読みなさい。
0978nobodyさん2005/04/13(水) 18:42:29ID:P5BMPkuz
my.iniのdefault-character-setがインストール時にlatin1になってますが、
でもこの状態でもマルチバイト文字列のデータを格納・出力出来ますよね。
(latin1は西欧の文字コードのはずなのに)
my.iniで設定しているdefault-character-setって何に影響するんですか?
0979nobodyさん2005/04/13(水) 18:45:22ID:???
ソートとか。
0980nobodyさん2005/04/13(水) 19:01:21ID:???
>>978
latin1ではAとaを同一視して扱う処理になる場合がある。
代表的なのは>>979とかね。
0981nobodyさん2005/04/14(木) 20:30:02ID:ujiybS0C
MySQLはコマンドプロンプトでquitで終了しないと駄目なんですか?

間違ってquiteと打ち込んだら->が出て
それ以降、何を打ち込んでも受け付けてくれなくなりました;
回避策教えてくださいm__m
09829812005/04/14(木) 20:38:08ID:???
¥Cってかいてありましたスイマセン
終了せずにウィンドの×ボタンで閉じるのは駄目ですか?
探してもそういうのが書いてあるのが見当たらないです、お願いします
0983nobodyさん2005/04/15(金) 00:47:26ID:???
>>979
さらにShift_JISでデータを入れようものなら、2バイト目にアルファベットが入っていて
aとAぐらいずれている漢字を同じ文字と見立ててしまう。
like でも別の文字が出てきちゃったりするお
EUC で入れても laten1 と宣言されたテーブルは同様に検索かましてくれます。

今だと何気にUTF-8が安全だったりするのかな?
0984nobodyさん2005/04/15(金) 13:24:18ID:???
>>981
ウィンドウのクローズでも、まあ良いけどね。
ただウィンドウのクローズの場合、mysqlとの接続を遮断するわけではないので
接続の遮断はタイムアウトにお任せだけど。
0985nobodyさん2005/04/15(金) 16:02:06ID:???
次スレ
MySQL 総合 Part4
http://pc8.2ch.net/test/read.cgi/db/1108124655/
0986nobodyさん2005/04/15(金) 21:25:19ID:+8mNx0eh
enum型で、ある文字列が無ければいけない、あるいはあってはいけないという指定の仕方があったような
覚えがあるんですが(+とか-とか使ってたような)、
今ぐぐってみても見つけられませんでした。(リファレンスにも見当たらなかった)
私の勘違い?
0987nobodyさん2005/04/16(土) 09:27:48ID:???
>>981
そんなあなたに\q。
09889812005/04/17(日) 00:38:14ID:???
>>984
>>987
レスありがとうございます。m__m
レス数が950を超えています。1000を超えると書き込みができなくなります。