トップページ⇒php
949コメント332KB

PHP + MySQL

■ このスレッドは過去ログ倉庫に格納されています
0001ECY NGNG
そろそろPHP + MySQLについても語ってほしい脳
0412nobodyさん02/11/12 01:24ID:SsiSHuUc
405さんに似た質問なのですが、
列Aと列Bをくっつけ、さらにcount(*)で数えて2以上あるデータを多い順から並べるということをやりたいのですが
なかなかうまくいきません。
mysql_query("select A_col,B_col as DATA1 ,count(*) as DATA2 from TABLE_1 group by DATA1 having DATA2 >=2 order by DATA2 desc");
↑は列B_colのデータでのみ集計してこなくて詰まっています。
---------------TABLE1の中身
A_col  B_col
aaa   111
bbb   111
aaa   111
bbb   222
---------------
↑のデータで「aaa111 が 2」を出力したいのです。助けてくださいまし(;´Д`)
0413nobodyさん02/11/12 01:49ID:TeIlFbWy
select concat(A_col,B_col) as DATA1,count(*) as DATA2
from TABLE_1
group by DATA1 having DATA2 >=2
order by DATA2 desc
0414nobodyさん02/11/12 02:05ID:???
>>413
ありがとうございます、うまく結果を返せました!
0415nobodyさん02/11/12 14:59ID:???
初心者ですみません。
MySQLであるフィールドを全部取得し、
$sql = "select count from dataA
countフィールドの数字を合計したいと思い、
$reslut = array_sum (A,B,C,・・・) ; というのを調べてきたのですが、
$sqlを(A,B,C,・・・)というような配列にするのはどうしたらよいでしょうか?
教えて君でゴメンなさい。お願いします。
0416nobodyさん02/11/12 16:02ID:???
>>415
 なにも取り出して計算しなくてもです :)
SELECT SUM(count) FROM dataA
 で良いんでない?
0417nobodyさん02/11/13 00:29ID:???
>>416 さん
ありがとう!やってみます。
0418nobodyさん02/11/13 00:58ID:???
やってみましたが・・・ Resource id #2 でてくる(T_T)

$sql = "select SUM(count) from dataA";
$result = mysql_query ($sql) ;
if (!$sql)
{ print("SQLの実行に失敗しました") ;
exit;
}
print ("<center>過去実績:<br>" . $result . "件。</font></p>") ;
0419nobodyさん02/11/13 01:17ID:???
>>418
お、おまえ、PHP+MySQL完全に初めてだな。
そんなんで$resultの中にSUM(count)の結果が入ってるなら
select userid,password,mail_address from user
とか実行したら$resultには何が入ってくると思う?

http://www.hotwired.co.jp/webmonkey/2000/01/index3a_page2.html
0420nobodyさん02/11/13 02:12ID:???
>>419 さん
プログラム自体初めてに近いです。独学で試行錯誤で頑張ってます。
初心者にレスありがとうございます。
他の select 文は表示されるのですが、これは表示されないです。
042141902/11/13 02:29ID:???
$sql = "select SUM(count) AS SUMCOUNT from dataA";
$result = mysql_query($sql);
if( $row = mysql_fetch_array( $result ) ){
  print ("<center>過去実績:<br>" . $row[SUMCOUNT] . "件。</font></p>") ;
} else {
  print ("失敗。") ;
}
こんなんでいけると思う。
というか入門書でも買った方がいいよ。
数千円のお金より垂れ流れていく時間のほうが大事っす。
0422nobodyさん02/11/13 02:37ID:???
基本的な構文>421みたいなのを覚えれば、後は関数を組み合わせたりして応用できると思うよ。
データを抽出して、配列に格納して、print。大体この順序だし。
0423nobodyさん02/11/13 03:23ID:???
>>421 さん >>422 さん
ありがとうございます。意味がわかりました!
抽出と配列への格納ですね。やったら出来ました。
0424nobodyさん02/11/17 21:14ID:uOvn3njt
あるMySQLのデータベースのフィールドlDateがDate型、lTimeがTime型なんです。
これをlDate + lTime以下を条件に削除したいので
SQL文 Delete From table Where lDate < '2002-11-17' And lTime < '00:00:00' をmysql_query()で実行しますた。
でも削除されません。
エラーでてないようです。
何がいけないのでしょうか?
0425nobodyさん02/11/18 00:13ID:IKSCnBSV
> 何がいけないのでしょうか?
あなたの頭...

時間を評価に加えたいなら、条件は次のようになるでしょ。
lDate < '2002-11-17' OR (IDdate='2002-11-17' AND lTime<'XX:XX:XX')
私ならこういうスケルトンは切らんけど。
0426nobodyさん02/11/18 18:13ID:???
>>424
何でdatetime型を使わないんだ…?
0427nobodyさん02/11/21 03:53ID:R8Yr+Jw9
phpとMySQLでショッピングカートを作っているんですが、注文が入った時
テーブルに(客ID、商品ID、個数)を入れます。(複数注文の場合はループで一つ一つ入れます。)

この場合、テーブルタイプはBDBとInnoDBどっちがいいでしょう?
厨な俺は今までMyISAMでロックなしでやってました…
0428nobodyさん02/11/21 06:54ID:???
>>427
アホほど注文来るのか?
その程度の作業なら、トランザクションなんぞ要らない。
PHP側の処理で対応出来ます。
0429nobodyさん02/11/21 13:08ID:T4lGgkT+
PHP側の処理とは?
043042802/11/21 18:54ID:zV2T5Gzq
>>429
ソレを考えるのがプログラミングの醍醐味では?

DBを使わない、ファイルにログを書き込むタイプの掲示板なんかのロック処理を応用する。
043142702/11/22 16:23ID:???
>428
ご教授ありがとうございます。
PHPで処理してみます。(注文はアホみたいにきませんが・・・)
0432nobodyさん02/11/24 21:18ID:9k1JVlB2
日本語をDBに更新すると文字化けする・・・
043339402/11/24 21:59ID:OWmSQ2+X
>>432
EUC-JPとかUTF-8とかをつかってみる
0434nobodyさん02/11/24 22:41ID:9k1JVlB2
>>433
どうしても S-JIS にしたい場合はどうすればいい?
0435nobodyさん02/11/25 06:01ID:???
>>432
元DBのデータを温存したいなら、DB部は元の文字コードを使って、
表示の時だけSJISにすればいいのでは?
0436nobodyさん02/11/25 08:15ID:Wgc+tEwe
レコードをdeleteすると、次にinsertした時その行にレコードが入れられてしまいますよね
実害は無いのですが気持ち悪いので何かスマートに順番に並べる方法は無いでしょうか
0437bloom02/11/25 09:16ID:Ou4iEOdu

http://www.agemasukudasai.com/bloom/
0438nobodyさん02/11/25 13:42ID:JXdRZ3s0
>>435
意味がよくわかんないんだけど、だったらdelete するな、と思うのはおれだけか?
0439nobodyさん02/11/27 06:16ID:AyxusqCI
質問です。
MySQLでデータベースに日付を入力するDATEと時間を入力するTIMEというカラムを
つくったとします。
そして、DATEには2002-11-27とTIMEには00:00:00という行と、
DATEには2002-11-27とTIMEには00:10:00という行と、
DATEには2002-11-26とTIMEには00:00:00という行が入力されたとします。

これを古い順でソートしようとすると、order by DATEとつけることになると
思うのですが、時間の順ではソートできなくなります。どうすればいいんでしょうか??

どなたかご教授ください。よろしくお願いします。
0440nobodyさん02/11/27 09:24ID:???
基本過ぎるぜ、だんな。
ORDER BY DATE,TIME
044143902/11/28 01:03ID:bMROl6Cl
> 440

ああ、それでいけるんですね。手元にある本にのってなかったので、、、
ちゃんとマニュアルよんどきます。

というかDATETIME型なんてあるんですね。
勉強不足でした・・・助かりました。修行に励みます。失礼します。
0442nobodyさん02/11/28 12:31ID:+5GONPaT
質問です。
レコードの数字部分の最小の値を得たいのです。
例えば
AB-001
AB-002
AB-003
ならばAB-004を
AB-002
AB-001
AB-100
ならばAB-100を
得るようにしたいのですが、どのようにしたらよいでしょうか?
AB-001から順番に調べていくのでしょうか?
スマートな方法があればうれしいです。
宜しくお願いします。
0443nobodyさん02/11/28 14:47ID:???
ワケワカラン。

ABってのが入ってるのと001が入ってるフィールドは別?
同じフィールドにハイフン区切りで入ってるの?

AB-xxxって値が入ってるの?全部AB?

最小なら上の例なら001、下の例なら002じゃないの?最大の間違い?
0444nobodyさん02/11/28 15:21ID:+5GONPaT
>>443
すいません。
日本語がわやな上に言葉がいろいろ抜け、さらに間違っています。

文字列レコード(primary keyを指定しています)
の数字部分の使用されていない最小の値を得たいのです。
例えば
AB-001
AB-002
AB-003
ならばAB-004を
AB-002
AB-001
AB-100
ならばAB-003を得たいです。
0445nobodyさん02/11/28 15:21ID:+5GONPaT
スマートでない方法で思いつくのは
$record[] にレコードを全て取得しているとして
$prefix = "AB-"として、

for( $i = 1; $i <= count( $record ) + 1; $i++ ){
// 個数より2以上大きい数が最小となることはない
sprintf( $check_str, "%s%03d", $prefix, $i );

$check = true;
for( $j = 0; $j < count( $record ); $j++ ){
if( $record[j] == $check_str ){
$check = false;
break;
}

if( $check )
break;
}

echo $check_str;

スマートな方法があれば教えて下さい。
0446nobodyさん02/11/29 00:30ID:???
>スマートな方法があれば教えて下さい。

テーブル設計をみなおす
0447nobodyさん02/11/29 23:10ID:kyVi4Psy
ウェブ上からmysqlに登録できなくなったので、
調べてみると、
telnetで直接insertしようとしても、えんえん待たされる状態になりました。
同じdatabaseの他のtableにはinsertできるのですが…。
これはどのような原因が考えられますか?
044844702/11/29 23:47ID:kyVi4Psy
deleteも待たされてできません。
selectは出来ますが、
telnetでeucの日本語が文字化けするので
ちゃんとできているのかはいまいち分かりません。
ロックはかけてませんが、テーブルが壊れることはない、
と過去ログにはあるし…なんなんでしょう?
0449nobodyさん02/11/30 02:11ID:???
>>447
よく解らないけどmyisamchkコマンドを試してみたら?
045044702/11/30 02:33ID:???
>>449
レスありがとうございます。
なんとも不可解だったのですが、
MySQLもインストールしてある/usrが
Apacheのログで100%Usedになっていたのが原因でした。
おさわがせいたしますた。
0451nobodyさん02/11/30 08:11ID:67+5Hznc
「テメーらここで質問する前にこのサイトくらい見とけよ(w」
みたいなPHP + MySQLの初心者向けのサイト教えてください。
0452nobodyさん02/11/30 12:17ID:jN+HZDrE

MySQLの導入
http://www.rfs.jp/server/mysql/index.html

PHP/MySQLチュートリアル
http://www.hotwired.co.jp/webmonkey/programming/php/tutorials/tutorial4.html

PHPマニュアル
http://www.php.net/manual/ja/
0453nobodyさん02/12/01 18:22ID:???
Win32 + Apache + PHP + MySQL の環境で、MySQL を使う PHP スクリプトを使っておられる方っていませんか?
例えばアクセス解析スクリプトとか。
というのも、当方が使ってる解析スクリプトは Les Visiteurs なんですが、解析表示で MySQL の CPU 使用率が百パーセント近くになってしまうんです。
Win32 で MySQL をお使いの方、貴殿のマシンではどうですか?
0454nobodyさん02/12/02 15:37ID:???
>>446
自己レスです。
とりあえずprefixはテーブルの外に出して番号だけを入れるようにしました。
で、全検索しますた。お騒がせしました。

>>453
うちもそうなります。カーソルまで固まりますね。
現状はそういうもんかと思っていますが、、
045545302/12/03 21:32ID:???
>>454殿
レスポンスありがとうございます。
そうですか。やはりWin32ではそうなるようですね。
PC-UNIXへの乗り換えを真剣に考えてみたいと思います。
0456nobodyさん02/12/05 00:18ID:kQitN0HN
質問なんですが、行が何行かある場合に
whileで回して毎回selectで読みに行くようなやり方でいいんでしょうか?
もっと上手いやり方とかありませんか?
0457nobodyさん02/12/05 00:29ID:VZIKFHpL
SELECT フィールド FROM テーブル WHERE フィールド = 'hoge'
こういうことじゃなくて?>>456
0458nobodyさん02/12/05 14:18ID:???
こんにちは〜です!!
質問があります。
PHP とか MySQL って、EUCだと思うのですが、
全て S-JIS で組みたいんです。
どうすればできるようになるのか教えてください。
0459nobodyさん02/12/05 14:23ID:???
勝手にやれ。
0460nobodyさん02/12/05 14:25ID:???
>>458 2,30回死ね。
0461nobodyさん02/12/05 16:08ID:Z0U+Oe8h
質問です。
a.phpとb.phpがあって、それぞれmysql_pconnectでMySQLに接続しているとします。

その際、a.phpの接続をb.phpでも再利用してくれるのでしょうか?
それとも、a.phpで確立した接続は次にa.phpがリクエストされた場合のみ再利用されるのでしょうか?
0462nobodyさん02/12/05 16:39ID:???
前者(の筈)
0463nobodyさん02/12/09 01:33ID:???
PHP+MySQL使える鯖リストみたいなのない?

相場はどのくらいよ?みんな自鯖なわけ?
0464nobodyさん02/12/09 05:46ID:vvvONNMO
携帯用コンテンツを作っています。
携帯はEUCじゃないんで、少し気になったのですが、
MySQLに入れる文字列、S-JISで問題ないですか?
046546402/12/09 05:53ID:vvvONNMO
過去ログみたら、問題ありっぽいですね。
EUCにしてからDBに入れる、
取り出してからSJISに変換…というやり方でいいのでしょうか?
0466nobodyさん02/12/10 00:57ID:ZDH4nUde
>>465
たぶん正解。あとでトラブりたくないならそれがベストでしょう。
0467nobodyさん02/12/10 21:21ID:1xJ1WsMK
PHP最近始めました。超初心者です。
Win98にApache+PHP+MySQLをいれたのですが、
データベースのデータはDOSプロンプトからしか作成できないのでしょうか?
それと、

<?php
$link=mysql_connect("localhost","root","????");
if ($link==false) die("接続できてない");
print "接続完了!!";
mysql_close($link);
?>

このソースをWebにUPしたときは、"localhost"と"root"と"????"の場所には
何を記述すれば良いのでしょうか?
0468nobodyさん02/12/10 21:45ID:???
     ∧∧   ミ ._ サクッ
     (   ,,)┌─┴┴─┐
     /   つ. 厨房警報 |
  〜′ /´ └─┬┬─┘
    ∪ ∪     ││ _ε3
゛゛゛'゛゛'゛゛'゛'゛゛'゛'゛゛゛゛'゛゛゛'゛゛
0469nobodyさん02/12/10 22:16ID:nfrh3Eto
Windowsの場合、データベース操作は基本的にコマンドプロンプト(cmd.exe)上で行う。
ただ、データベース管理ソフト(PHPスクリプトではない)などを用いた場合はこの限りではない。
localhostの部分は、貴方のマシン上でデータベースが走っていれば変えなくてもいい。
rootは貴方が前もって作成した自分のユーザー名、????はそのパスワード。

ところで皆さん、今日はサボらず仕事しますたか?
0470nobodyさん02/12/10 23:29ID:???
>ところで皆さん、今日はサボらず仕事しますたか?

まさか。一日中2ch三昧デスヨ
0471nobodyさん02/12/11 03:23ID:wyfErbBz
今、ランキングのようなものを作っています。
カウンタでorder byしてselectしてた結果セットから、
指定した範囲のデータを取り出すにはどうすればいいのでしょうか?
0472nobodyさん02/12/11 03:53ID:???
>>465
半角かなとか使いたかったら、UTF-8でDBに保存するという手もあるね。
0473nobodyさん02/12/11 03:54ID:???
>>471
結果が100列出たとしたら、その中の20から29までを取り出すとか?
0474nobodyさん02/12/11 06:40ID:???
Limit
047547102/12/11 09:00ID:???
>>473
そうです。
>>474
ありがとうございます。
全取得してmysql_data_seek使ってました。
SQLの段階でlimitを使えるんですね。
0476質問です02/12/11 16:44ID:???
48時間以内に追加されたデータだけを取り出したいのですが
どのようにすればいいんでしょうか?
0477nobodyさん02/12/11 16:59ID:???
WHERE TIME_FIELD >= '48時間前の時間';
0478bloom02/12/11 17:02ID:tfVVditW

http://www.agemasukudasai.com/bloom/
0479質問です02/12/11 17:02ID:???
>>477
ありがとうございます!

TIME_FIELDはDATETIMEで「2002-12-11 17:00:00」のような感じでいいんでしょうか?
それともUNIX時間のようなものを登録したほうがいいんですか?
0480nobodyさん02/12/11 17:07ID:???
>>479
> TIME_FIELDはDATETIMEで「2002-12-11 17:00:00」のような感じでいいんでしょうか?

うん。
0481質問です02/12/11 17:09ID:???
>>480
ありがとうございました。
0482あの〜02/12/11 20:14ID:ev3EQy1k
PHP+MySQLで掲示板してるんですけど、サーバー移行にあたり、どうしてもMySQLのデータの移行部分がわかりません。
簡単にデータ移行できるソフトとか方法があったら教えて欲しいのですが…
dumpとかよくわからなくて…
0483nobodyさん02/12/11 20:27ID:???
phpMyAdmin
0484nobodyさん02/12/11 21:38ID:???
データファイルをそのまんまコピーじゃダメかい脳?
0485あの〜02/12/12 14:14ID:ZuG/4ZFd
nobodyさんありがとうございます。
一度csvにダウンロードして、phpMyAdmin内で「テーブルにテキストファイルの追加」ってので一応できました。
ただ、文字化けの問題だけが…
一部ですが、文字化けする文字のエスケープ処理!?が解決できれば(^0^)/なんですが…
ちなみに、元データは文字化けをしない状態にして保存されています。(\とかが付かない状態)
0486nobodyさん02/12/13 00:28ID:???
PHPアイコン掲示板で昇格機能ついてるのを見かけたことありませんか?
0487nobodyさん02/12/13 06:10ID:???
>>486
マルチポストうぜぇ。スレ違いだ、死ね。
0488しつもんくん02/12/13 22:47ID:suET/Tk2
insert intoでauto_increment属性を含むフィールドのあるテーブルにレコードを
追加したとします。
その直後に、auto_incrementのフィールドに入った値を知る方法はありますか?
0489nobodyさん02/12/13 22:52ID:???
kensakushiroyo
0490nobodyさん02/12/13 22:55ID:???
>>488
mysql_insert_id
0491nobodyさん02/12/14 00:18ID:???
488です。
大変助かりました。ありがとうございます。
>>489
一応検索したけど見つけることができませんでした。
insert into じゃなくてinsert で探せば良かった・・・
0492nobodyさん02/12/14 18:38ID:ReF0iUS4
質問なのですが、テーブルの行数を得たいのですけども

$result = mysql_query("select id from test");
$num_rows = mysql_num_rows($result);

よりも、簡単な方法はありませんか?

$result = mysql_query("select count(id) from test");

で、求められるようにも思えるのですが、いまいち方法がわからないです。
最初のやり方だと、行数がふくれたときに重くなりそうな気がしますし。
0493nobodyさん02/12/14 20:25ID:???
下のやり方なら、mysql_result($result,0,0)
でデータを取得できると思う。
ただし、やってることは同じ。軽くなりません。
049449202/12/14 23:37ID:???
>>493
返答ありがとうございます。勉強になりました。

とりあえず、データを挿入するときに、別の場所に挿入した行数を保存することで
対処しようかと思います。
0495nobodyさん02/12/15 03:21ID:???
$result = mysql_query("select count(id)as n_rows from test");
みたいに、名前を付けて、
$rows = mysql_fetch_arrya( $result ) ;
$num_rows = $rows["n_rows"] ;
とできるんじゃなかったけ? (実行環境が無いので自信無し)
取得後は、
mysql_free_rusult( $result ) ;
とメモリを開放してやること。

「別の場所に挿入した行数を保存」するのは、管理が大変じゃないかな。
0496nobodyさん02/12/16 23:56ID:???
DATETIME型の項目があって
その値の古い順に削除するにはどうすればいいですか?

$query = "DELETE FROM table_name WHERE 1 > 0 ORDER BY date_field LIMIT $cnt";

これだと文句言われるです
049749602/12/17 00:14ID:???
MySQLのVersionの所為ですたスマソ
0498nobodyさん02/12/17 22:46ID:UtA/ADyw
CQ出版「PHPとMySQLで作るショッピングサイト」に掲載されている
phpdevなるものをインストールしました。

http://www.firepages.com.au/

結構楽かも。
0499 02/12/17 22:48ID:???
http://www2a.kagoya.net/~adults-toybox/sample1.wmv
http://www2a.kagoya.net/~adults-toybox/sample2.wmv
http://www2a.kagoya.net/~adults-toybox/
0500nobodyさん02/12/17 23:01ID:???
500get!
0501nobodyさん02/12/17 23:53ID:???
>>498
嬉しいのは分かるがphpdevの説明ぐらいしてください。
「phpdevとは、Windowsに PHP、MySQL、Apache、 (PERL)などをインストールするパッケージです」
>>500
嬉しいのは分かるが、最後にズサーが抜けてます。
0502nobodyさん02/12/18 20:26ID:5JJf1BHQ
外人の方が書かれたリンクカウンターのコードですが
わからない部分がありましてご教授願えたらと思い投稿させていただきます。

1 $c=mysql_query("select id from TW_click where url='$j' order by id desc limit 1");
2 $d=mysql_fetch_object($c);
3 if(is_object($d)){
4 mysql_query("update TW_click set hits=hits+1 where id={$d->id}");}
5 mysql_query("insert into TW_click (url)values('$j')");}

4行目の id={$d->id} というのは何を意味しているのでしょうか。
申し訳ありませんがよろしくお願いします。
0503nobodyさん02/12/18 21:01ID:???
>>502
$d->$idでしょ
{}でくくってるのは墓石k
0504nobodyさん02/12/19 17:29ID:lzLv+VhC
>>502

$d->idというのは,$dというオブジェクトのidという変数のこと。

中身は
select id from TW_click where url='$j' order by id desc limit 1
の結果。
0505nobodyさん02/12/19 18:25ID:???
>>504
> >>502
> $d->idというのは,$dというオブジェクトのidという変数のこと。
オブジェクトと言うより、インスタンスだよね
0506nobodyさん02/12/19 22:40ID:6CY601Q7
+-----+-------+
|名前  |持ち物 |
+-----+-------+
|A    |りんご  |
|     |バナナ |
+-----+-------+
|B    |みかん |
+-----+-------+
こういうのはどうやったらできるのでしょうか?
0507nobodyさん02/12/19 22:44ID:???
>>506
お前マジで参考書ぐらい買えよ
0508nobodyさん02/12/19 23:41ID:???
print<<<mona
+-----+-------+
|名前  |持ち物 |
+-----+-------+
|A    |りんご  |
|     |バナナ |
+-----+-------+
|B    |みかん |
+-----+-------+
mona;
0509nobodyさん02/12/20 01:14ID:???
>>506
俺はAscii Art Editorってのを使ってる。簡単にできるよ。
0510kodokuman02/12/20 15:22ID:???
http://www.matsuya-building.co.jp/testphp/backend.txt
↑上のソースはサーバーに載せてもエラーはでないのですが・・・
メール配信の方がされません!僕のは何が間違えてるかわからないんですけど、誰かわかりますか?
0511nobodyさん02/12/20 16:55ID:???
ちゃんと見てないけど、mail関数の"From: AuthMan"がマズイんじゃないの?
メールログ見れるなら、それ見れば即解決。
■ このスレッドは過去ログ倉庫に格納されています