トップページphp
1001コメント347KB

【PHP】下らねぇ質問はここに書き込みやがれ 27

■ このスレッドは過去ログ倉庫に格納されています
00011様2006/08/23(水) 00:54:52ID:uM5Jzzy0
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
  (逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
  (荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0056nobodyさん2006/08/24(木) 09:22:57ID:???
>>55
POST後のプログラムを
<?php
session_start();
if($_SESSION['number']){
$zzr = $_SESSION['numer'];

$MySQL['HOST'] = 'localhost';
$MySQL['USER'] = 'root';
$MySQL['PASSWORD'] = '******';
$MySQL['DATABASE'] = 'test';

mysql_connect($MySQL['HOST'],$MySQL['USER'],$MySQL['PASSWORD'])
or exit('mysqlへ接続できませんでした');
mysql_select_db($MySQL['DATABASE']);
mysql_query("insert into hoge value(null , '$zzr')");
}
?>
とセッションでデータを引渡すようにするだけだと思うんだが
これだと何か問題があるのか?
0057nobodyさん2006/08/24(木) 09:31:31ID:???
>>56
それだと、$_POSTがNULLになってしまうのです

<FORM>内に値がないからだと思うのです
0058nobodyさん2006/08/24(木) 09:36:02ID:???
>>57
NULLで何が困るのか分からんが、必要ならsubmitにname="regist"とでも入れてやれ。
0059nobodyさん2006/08/24(木) 09:49:25ID:???
>>58
そうなんです、思い出しましたw

<input type="hidden" name="mode" value="regist">

これの意味がわからなかったから、思考停止になっていました
しかし、、、これってどのような役割をしてくれるのでしょうか・・・
0060nobodyさん2006/08/24(木) 09:50:52ID:X79pe6wS
>>59
考えてわからないなら試してvar_dumpでもしてみれ
0061nobodyさん2006/08/24(木) 10:04:17ID:???
>>59
POSTが送信されたので更新のプログラムを実行しましょう、
という合図用。
0062nobodyさん2006/08/24(木) 10:11:51ID:???
>>60-61
サンクス

うまく動いたのですが、DB観ると一度の処理で同じ値が2レコード入る

もう(><;;;
0063nobodyさん2006/08/24(木) 10:16:06ID:???
>>62
しねばいいと思うよ
0064nobodyさん2006/08/24(木) 10:18:29ID:???
>>62
根本的にプログラムの流れもデータの流れも何も理解しようとせず
何となくだけでプログラム作ってるだろうお前。
0065nobodyさん2006/08/24(木) 10:21:39ID:???
>>64
その通りです
大まかな流れはわかったつもりなんですが、ちょっとした応用もできないアホです。。。

フォーム内のセッションで受け取った値を変数に格納しているのに
POSTに値が入らないからDBに送られなかったら、2重の処理させたり

しっちゃかめっちゃかです
スクリプトを1から練り直します
0066nobodyさん2006/08/24(木) 10:50:54ID:???
すみませんでした
結論として、INPUTボタンを連打していただけでしたorz

素直に「登録しますた」画面を飛ばせばよかた
0067nobodyさん2006/08/24(木) 12:01:33ID:???
「登録しますた」画面をリロードしたら
また登録されたりしてねw
0068nobodyさん2006/08/24(木) 12:06:39ID:???
session_destroyしているから、そこはOKだけど
QueryがTRUEかFALSEかで飛ばすページを分けさせようとすると、うまくいかん

うんもー前に進まん(><;
0069nobodyさん2006/08/24(木) 13:15:51ID:???
がむばれ(><o
0070nobodyさん2006/08/24(木) 13:57:47ID:???
これまで何回も同じ処理を繰り返す場合、
requireを使用してきました。
そろそろ functionとclassを覚えていこうと思っているのですが、

require(include) と比べて function のメリット、
function と比べて class のメリット、
の2点がイマイチつかめません。
それぞれ教えてもらえないでしょうか?

function に関しては引数を設定できる、というあたりでしょうか?
0071nobodyさん2006/08/24(木) 14:13:36ID:???
>>55
XSS脆弱性イクナイ
0072nobodyさん2006/08/24(木) 14:26:24ID:???
>>71
XSSの話になるとhidden使えんな
0073nobodyさん2006/08/24(木) 14:57:03ID:???
やっぱり<FORM>内の情報をhiddenで埋め込む方法しか思い浮かばない・・・
一応、処理が問題なされているソース貼る
hidden使わないソースに修正お願いしまつ

<?php
session_start();                            //前ページからセッションを受け取る
if($_SESSION['zz']){$aa = $_SESSION['zz'];}

if($_POST['db']){                           //フォームに値があるならば
$gg = $_POST['ff'];                         //hiddenに埋まっている値を変数に格納

 $MySQL['HOST'] = 'localhost'; $MySQL['USER'] = 'root'; $MySQL['PASSWORD'] = '*******'; $MySQL['DATABASE'] = 'test';
mysql_connect($MySQL['HOST'],$MySQL['USER'],$MySQL['PASSWORD'])or exit('mysqlへ接続できませんでした');
mysql_select_db($MySQL['DATABASE']);

$hh = mysql_query("insert into hoge value(null , '$gg')");  //MySQL5にオートインクリ込みで送信

if($hh =="true"){                          //MySQL5からTRUEが帰ってきた場合
header('Location: test3.php');                  //「登録完了しまつた」ぺージへ飛ぶ
session_destroy();
}else{
header('Location: test1.php');                  //最初のページに戻り、セッションは破棄しない
}
}?>
<form method="post" action="test2.php">
<TABLE border="1"><TBODY><TR><TD>番号:</TD>
<TD><?PHP print($aa); ?>                           //セッション情報をブラウザに表示
<input type ="hidden" name ="ff" value="<?php print($aa); ?>">   //セッション情報をhiddenで埋め込み
</TD></TR><TR><TD><input type="submit" name="db" value="DBへ">
</TD><TD></TD></TR></TBODY></TABLE></form>
0074nobodyさん2006/08/24(木) 15:18:33ID:BibIZoi3
>>70
require に比べて、function は明示的な変数の有効範囲を設定できる

[foo_req.php]
$a = 10000;

[foo.php]
$a = 10;
var_dump($a);
require('foo_req.php);
var_dump($a);

こんなコードを実行すると、2回目の var_dump() で $a の値が変更されているのが
確認できるだろう
単純な処理のうちはこれでもいいが、複雑になってくると不具合を作る原因になる
0075nobodyさん2006/08/24(木) 15:59:01ID:???
>>73
//フォームに値があるならば
//hiddenに埋まっている値を変数に格納

//フォームに値があるならば
//セッションの値を変数に格納

なんのためのセッションだ
0076nobodyさん2006/08/24(木) 16:04:19ID:???
hiddenなんて嫌い。
GETで値を渡してあげればいいじゃん。

<form method="post" action="hoge.php?id=2&nullpo=true">
<input ...
0077nobodyさん2006/08/24(木) 16:28:50ID:???
>>75
ですよね
と思いつつ、修正したら、あっさり解決しました
あぁ hiddenから開放された
みなさん スペシャルサンクス

これから郵便番号AJAX始めますorz
0078nobodyさん2006/08/24(木) 16:45:06ID:???
あなたはそんなもん作るよりまずは
HTML覚える→PHP覚える→セッション覚える→DB覚える
をしたほうがいいと思う。フォームすら満足に使えないのに、時間の無駄。
0079nobodyさん2006/08/24(木) 17:02:10ID:???
Web技術の怖いところは素人がセキュリティ甘いものを公開すると、
踏み台となって他人に迷惑をかけたり、
素人が作ったと認識できない別の素人が利用して、さらに踏み台が増殖したりすることだ。

つまり素人はじっくり修行してから公開しろってこった。
まじめに修行する気のない素人は消えろカス
0080nobodyさん2006/08/24(木) 17:05:23ID:???
それで大人っ面したつもりなのかな?
0081nobodyさん 2006/08/24(木) 17:09:20ID:???
php5+eacceleratorのレンタルサーバを探しています。どこかないですか?
0082nobodyさん2006/08/24(木) 17:12:00ID:???
>>78-79
一応、骨格は作れそうです
ただエラー制御やセキュアな環境にするためには、まだまだです
しかし、、、UIを作り上げるための時間が残り少なく・・・

お叱りはごもっとも
また叱ってください!!
0083nobodyさん2006/08/24(木) 17:21:01ID:???
>>82
何このマゾ
0084nobodyさん2006/08/24(木) 17:27:26ID:wCBGqZdj
GETってセキュリティー的にはどうなの?
POSTのほうがマシとかあるの?
関係ない?
0085nobodyさん2006/08/24(木) 17:32:03ID:???
GETの方がネットど素人でも簡単に目に見えちゃうからね。
ど素人でもなんとなく意味もわかればいじられるかもしれないし。
まぁどちらかと言えばGETが悪いってくらいで、あんま変わらんじゃね?
0086nobodyさん2006/08/24(木) 17:33:26ID:???
たとえば携帯からだと基本的にソースを見れないので、POSTにしちゃえば何を送信してるかもわからん。
0087nobodyさん2006/08/24(木) 17:36:42ID:wCBGqZdj
なるほどね。でもよくあるメールで本登録完了とかいうアドレスを送信するのってGETじゃないとできなくね?
0088nobodyさん2006/08/24(木) 17:37:17ID:???
全部HEADでいいよ
0089nobodyさん2006/08/24(木) 17:44:08ID:wCBGqZdj
HEAD?ド素人ですみません。
0090nobodyさん2006/08/24(木) 18:21:31ID:???
>>72
hiddenかどうかはXSSに関係ない。
エスケープしてるかどうかが大事。
0091nobodyさん2006/08/24(木) 18:42:42ID:???
つまりhtmlspecialchars乱用
0092nobodyさん2006/08/24(木) 18:50:13ID:???
乱用して何か問題でもあるのか、と小一時間。
0093nobodyさん2006/08/24(木) 18:52:41ID:???
$kore = 100000000000 + 1;
//結果:100000000001

$kore = 1000000000000 + 1;
//結果:1E+12

12桁を超えるとこんなになっちゃうんですが、どうしたらよいのでしょうか?
0094nobodyさん2006/08/24(木) 19:20:33ID:???
>>91
乱用しないために
htmlspecial(); というグローバル関数があったと思うが

この中に変数入れまくればいいんじゃまいか?
0095nobodyさん2006/08/24(木) 19:21:11ID:???
>>93
ttp://www.php.net/manual/ja/language.types.integer.php
0096nobodyさん2006/08/24(木) 19:21:22ID:???
データベースから50件取ってきて表示させて次のページはその続きから表示させる
みたいな感じで一定の件数ごとにページを切り替えるようにしたいのですが
どこか説明しているHPなどありますでしょうか?
ググり方が悪いのか思った通りのページがhitしません。
0097nobodyさん2006/08/24(木) 19:27:58ID:???
>>92
貧民的プログラマー
0098nobodyさん2006/08/24(木) 19:47:02ID:???
>>96

表示するページをlist.phpとする。
このページは引数に指定された所から50件表示するページ。

http://hoge.net/list.php?start=1
みたいに引数を読み込んで動作する。
で、この場合、1から50件表示する。
(表示はループで出す)

んで、ページの中に
<http://hoge.net/list.php?start=51>;NEXT</A>
と、次のページの開始位置を入れたリンクを設定する。
こうすると51番目から50件表示される。

ちなみに次のページでは、前のページに戻るためのリンクも入れておく。
<http://hoge.com/list.php?start=1>;BACK</A> ←1番から50件出すってこと。
0099702006/08/24(木) 19:59:41ID:???
>>74
レスサンクスです、
function の classと比較してのメリットはなんでしょうか?
昨日 本で読んで、軽くプログラムを作っただけでは
クラスがfunction()と比較して
どういう場合に有効活用できるのかがあまり理解できませんでした。
継承とかはあとあとの修正時に便利そうだなとは感じましたが。

クラスは部品、という説明がよくありますが、
結局functionも部品ですよね?
どこが大きなメリットなんでしょう。
0100nobodyさん2006/08/24(木) 20:16:36ID:???
>>99
実際使ってみた方が理解早いと思うけどね・・・
例えるならfunctionはCPUやメモリ、ビデオカード、M/Bだ。
で、クラスはPC。
一台のPCを用意するときはパーツ用意してきて自作しても良いが、
10台20台となると同じPC一気に購入してきた方が楽っしょ。
つまり、そう言うことだ。
0101nobodyさん2006/08/24(木) 20:19:34ID:X79pe6wS
そもそもfunctionとclassは別物ですよ。簡単に書けば一連の処理をまとめたものを
定義したものがclass。
0102nobodyさん2006/08/24(木) 20:23:42ID:???
>>99
厳密な意味でのオブジェクト指向のプログラミングはそれ専門の本などを
調べてもらうとして簡単な例をあげる

関数
function foo($a) {
 $a =+ 100;
 return $a;
}
function bar($a) {
 $a += 200;
 return $a;
}
$a = 0;
$a = foo($a);
$a = bar($a);
print($a);
0103nobodyさん2006/08/24(木) 20:23:55ID:???
クラス
function foo() {
 $this->a += 100;
}
function bar() {
 $this->a += 200;
}

$obj->a = 0;
$obj->foo();
$obj->bar();
print($a);

いまは $a しか foo() bar() の中で利用していないが、これが複数に
なると関数だと記述するのがめんどうになったり、
処理内容を変更したときに変更箇所が広域にわたってしまうことがある
クラスでまとめてしまうと、処理がクラスの中で閉じられるので、
そういったわずらわしさが軽減される。
0104nobodyさん2006/08/24(木) 20:26:33ID:???
>>99
難しく考えなくていい。
とにかくclassに関連するfunctionつめこんどけばおk
0105nobodyさん2006/08/24(木) 20:28:00ID:???
>>103
間違えた
print($a);
ではなく
print($this->a);
0106nobodyさん2006/08/24(木) 20:32:55ID:???
>>97
おいおい、貧民的プログラマーは>>91だろうが。
0107nobodyさん2006/08/24(木) 20:45:38ID:???
セッションIDをクッキーに保存するにはどうしたらいいでしょうか?
クッキーに保存されなくて困ってます。。
よろしくお願いします。
0108nobodyさん2006/08/24(木) 21:11:54ID:???
くだらない質問ですみません
$a = "1\t2\t3\t4\t5";
これを区切り文字\tで区切って
whileとかで1つずつ表示するにはどうしたらよいのでしょうか?
0109nobodyさん2006/08/24(木) 21:16:45ID:???
>>108
explode と foreach で如何?
0110nobodyさん2006/08/24(木) 21:17:53ID:???
$a = "1\t2\t3\t4\t5";
$b = explode("\t", $a);

foreach($b as $value){
echo $value;
}
0111nobodyさん2006/08/24(木) 21:34:34ID:???
>>110
ありがとうございます!たすかりました!
0112nobodyさん2006/08/24(木) 21:36:20ID:???
>>107
session_start()を呼び出せば勝手にセッションクッキーが発行されてるよ。
きちんとセッションIDが渡されてるかどうかを確認するには、
HTTPヘッダーをスニファしてみればいい。ieHTTPHeadersなどが簡単でオススメ。
0113nobodyさん2006/08/24(木) 21:38:48ID:???
フリーのPHPBLOGのCMSで使いやすいのありますか?
ぐぐったんですがいまいち見つけられませんでした
0114nobodyさん2006/08/24(木) 22:11:59ID:???
>>113
本当にぐぐったの?いっぱいでてくるけど。
ttp://www.simplephpblog.com/
こんなんとか
0115nobodyさん2006/08/24(木) 22:32:35ID:???
>>112
>>107はsession_start()の前に何かを出力している悪寒がす
例えば改行とか・・・

0116nobodyさん2006/08/24(木) 22:34:37ID:???
>>115
ブラウザ閉じておいてセッションIDが保存されていないとか言ってるあかん
0117nobodyさん2006/08/24(木) 23:01:49ID:???
>>111
>>109は無視かよ、ひでー
0118nobodyさん2006/08/24(木) 23:03:36ID:???
>>117=>>109
乙とでもいわれたかったのだろうか
0119nobodyさん2006/08/24(木) 23:32:14ID:???
ちょっと上でも話題が出てたけど・・・
POSTとかGETで受け取ったデータをDBに保存する処理と、登録ありがとうございました、っていう
メッセージを出す画面を同じファイルで書いた場合、更新するともう一件データが登録されちゃう・・・
これはDBに登録する処理と画面に出す処理を別ファイルに分けるのが一番手っ取り早い方法ですか?
0120nobodyさん2006/08/24(木) 23:38:09ID:???
>>119
Yes
0121nobodyさん2006/08/25(金) 00:46:37ID:j1RIrLGf
再帰関数で、一定の回数自己関数を繰り返したら、関数自体を抜けたい場合
どうやれば良いのでしょうか。
サンプルコードだとこんな感じで、10回まわったら"post"を表示せず次の処理に
移りたいです。

recursive();

function recursive ()
{
static $i = 0;

$i++;

if ($i != 10) {
recursive();
}

echo "post<br>";
}
0122愚痴2006/08/25(金) 01:13:48ID:???
いまさらなんだがionのenco早く無いじゃないか。
0123nobodyさん2006/08/25(金) 01:25:47ID:???
>>122
まーローダー探しに行ってるからね。

Zend Encoderのが良いに決まってる。
0124nobodyさん2006/08/25(金) 01:29:40ID:???
loader探しに行ってるにしても
encoしてるので20秒
生ソースで2秒はないだろう...
主な処理は大量演算ループです。
ふつうencoするならループ系はハヤクナルンジャマイカ?
0125nobodyさん2006/08/25(金) 01:40:07ID:???
>>121
それって動くの?
recursive ()中にrecursive ()が入ってない?
0126nobodyさん2006/08/25(金) 01:48:48ID:???
>>125
お前って奴は・・・
0127nobodyさん2006/08/25(金) 02:06:10ID:/0MHpE74
質問させてください。
PHP5.1.5
Apache2.055
WindowsXP Sp2
という構成でサイトを作っています。

問題:アクセス解析サービスでリファラが正常に取得できない

index.phpにアクセスすると携帯かPCか、アクセスクライアントを判断して
それぞれにあったページを表示しているのですが、
そのページに、以下の様なアクセス解析サービスをつけています。
<img src="http://w1.ax.xrea.com/l.f?id=100646XXX&url=X"; border="3" width="40">

このように画像を読み込んでアクセス解析するタイプでは、リファラが正常に取得できないようなのです。
静的なHTMLでは正常にリファラを取得してくれるのですが、
phpからページ生成をするような場合は、リファラには全て自分のサーバがセットされてしまうようです。

どうにかphpから生成したページでも正常にリファラを取得できるようにはならないものでしょうか。
もし宜しければアドバイス頂けませんでしょうか。
0128nobodyさん2006/08/25(金) 02:11:13ID:???
>>114
国内産でおねがいします
0129nobodyさん2006/08/25(金) 02:19:35ID:???
>>124
そういう単純処理の高速化は難しい。

この手のソフトは一回構文を評価したのち、
早い順番に内部の関数を入れ替えてエンコードするんだけど、
その秒数は異常かもね。Zendの奴使ってるけどそんなケースはないなぁ。
0130nobodyさん2006/08/25(金) 02:27:53ID:???
>>124
早くならないどころか大幅に遅くなってて意味ないじゃんか。
何か設定がおかしいんじゃねぇの?
0131nobodyさん2006/08/25(金) 02:57:20ID:???
>>125
再起呼び出しも知らんのか。お前ホントにプログラマか??
0132nobodyさん2006/08/25(金) 03:23:46ID:???
>>131
すんません。漏れも知らないです。
本職はPGでもなきゃIT系でもないので許してください。
0133nobodyさん2006/08/25(金) 03:43:40ID:???
>>131
ほほぉ、こんなの動くんだ。
勉強になったが、今まで困らなかったからなぁ・・
0134nobodyさん2006/08/25(金) 04:49:02ID:???
勿論抜ける処理をしないといけないけどね。
プログラマだろうが知らない事あって当然
0135nobodyさん2006/08/25(金) 05:24:08ID:???
if($i==10){
echo "post<br>";
return ;
}
recursive();
にすると末尾再帰でループに最適化・・・PHPはされないんだっけ?

0136nobodyさん2006/08/25(金) 06:17:46ID:???
opcodeを最適化するaccelerator使えば末尾呼び出しは最適化される
0137nobodyさん2006/08/25(金) 07:05:50ID:???
>>127
php自身でリファラとればいいじゃん
静的なHTMLでもリファラは自分自身になると思うが(Javascriptとかで渡さない限り)
0138nobodyさん2006/08/25(金) 08:38:20ID:???
>>136
ありがd
0139nobodyさん2006/08/25(金) 11:56:06ID:???
前スレ774 http://pc8.2ch.net/test/read.cgi/php/1154923910/774 ですが
fopen 'r+'
ftruncate
でもダメでした。
file()やfile_get_contents()はflock中でも読み込んでしまうので
上書きのための一時的に空の状態の時に実行されてしまう事があります。

素直にfreadかfgetsでも使おうと思います。
助言くれた方、ありがとう。
0140nobodyさん2006/08/25(金) 11:57:38ID:???
失礼
私は前スレ770でした。
http://pc8.2ch.net/test/read.cgi/php/1154923910/770
0141nobodyさん2006/08/25(金) 12:26:17ID:x7whBw5F
// 制限時間を設ける
$expire = time() + 60 * 60 * 24 * 10;

// クッキー情報をセット
setcookie("name", $name, $expire);

これで、Warning: Cannot modify header information - headers already sent by...というエラーが出るのですが、何故でしょうか?
0142(^ω^)2006/08/25(金) 12:36:10ID:???
マニュアルは、しっかり、何回も、読むのよ!
分かりましたね!?
聞いてなかったとは言わせないよ!
ねえみなさん!

http://jp.php.net/manual/ja/function.setcookie.php
><html>や<head>タグはもちろん 空白も含め、あらゆる出力よりも前にこの関数をコールするようにしなければなりません。
0143nobodyさん2006/08/25(金) 12:46:45ID:x7whBw5F
>>142
<?php
$name = $_POST['name'];
$name = htmlspecialchars($name);
$expire = time() + 60 * 60 * 24 * 10;
setcookie("name", $name, $expire);
?>

ありがとうございます。
setcookie以前には出力は出ないようにしました。
しかし、この6行のスクリプトでも同じようにエラーが出るのですが、何故でしょうか?
0144nobodyさん2006/08/25(金) 12:58:18ID:r3tiUVo5
すみません、ど素人な質問ですがよろしくお願い致します。
PHP4系とMySQL3.23系で開発してます。

no uid visit_id year month day timestamp
1 35 1 2006 8 20 1156044334
2 1 31 2006 8 25 1156437877
3 1 33 2006 8 25 1156440499
4 31 1 2006 8 25 1156441495
5 31 32 2006 8 25 1156442959
6 31 1 2006 8 25 1156442961
7 35 33 2006 8 25 1156443005
8 35 1 2006 8 25 1156443007
9 35 1 2006 8 25 1156443342


上記のようなテーブル構成でデータが入っているとき、
「同じ年月日の中で、visit_idが同じ値のレコードが複数あった場合、一つだけ選ぶ。
 一つだけ選ぶ基準は、timestampが最も大きいレコード。その時のuid(またはno)」
を、抽出したいと考えています。

たとえば、visit_idが「1」のとき、「no」が「1」と「6」と「9」のレコードを得たいです。
0145144(続き)2006/08/25(金) 13:00:30ID:r3tiUVo5
それで
SELECT `no`, `uid`, `year`, `month`, `day`, `timestamp`
FROM テーブル
WHERE `visit_id`='1'
ORDER BY `timestamp` DESC
だと、
「no」が「9,8,6,4,1」のレコードが得られます。
ここまでは想定通りです。


ここで、「uidが重複しているレコードのうち、timestampの値が小さいほう」を除外すれば、
抽出したくないレコード(「no」が「8と4」のレコード)を含まず、
当初の目的である、「no」が「1,6,9」のレコード だけが得られるはずです(…よね?)


そこで、
SELECT `no`, `uid`, `year`, `month`, `day`, `timestamp`
FROM テーブル
WHERE `visit_id`='1'
GROUP BY `uid`
ORDER BY `timestamp` DESC

と、GROUP BY `uid`を加えてみると、得られる結果は「no」が「4と1」のレコードでした。
「no」が「8と4」のレコードを得るのではなく、
逆にこれを除外して「no」が「9」と「6」と「1」のレコードを得たいと
思っていたのに、まったく正反対の結果になってしまいます。

正しい結果を得るには、どういうSQL文を発行したら良いのでしょうか?
0146nobodyさん2006/08/25(金) 13:19:03ID:???
サブクエリー使えばいいんじゃないの?MySQL4.1以降からしか使えないみたいだけど。
PHP関係ないし、DB板で聞いてきたら?
0147nobodyさん2006/08/25(金) 13:24:38ID:HJhLYM88
物件検索システムのスクリプトあるとこ教えて。
探したけどすべて有料なんだもん。
0148nobodyさん2006/08/25(金) 13:31:21ID:???
>>143
<?php の前の改行のせいです
0149nobodyさん2006/08/25(金) 13:36:40ID:???
お願いします。
名前はすべて苗字(漢字)名前(ひらがな)で構成されているリストから
名前=ひらがな部分を抜き出したいのですが、どうすればよいでしょうか?
01501492006/08/25(金) 13:37:18ID:jN6+EhEe
すいません、sageちゃいました
0151nobodyさん2006/08/25(金) 13:38:15ID:???
>>145
年月日の連結文字列カラムをSELECTして
そのカラムでdistinctで重複はじいてとかでいけないかな
0152nobodyさん2006/08/25(金) 13:57:13ID:???
>>149
各文字コードにあった、マッチング処理が必要だと思う
そんなことをやってくれる、公開されたスクリプトあったかな
0153nobodyさん2006/08/25(金) 14:16:07ID:???
http://hotwired.goo.ne.jp/webmonkey/2005/03/index4a_page6.html
上のページ、見てて疑問に思ったんですが、
$page = new stylesMainMenu();
$page = new mainmenu();
だけでページ表示されるんでしょうか?

$page->stylesMainMenu();
$page->mainmenu();

を行う必要はないのでしょうか?
0154nobodyさん2006/08/25(金) 14:27:36ID:???
>>143
UTF-8のファイルでファイルの先頭にBOMが付いているかも
0155nobodyさん2006/08/25(金) 14:32:39ID:cXrhOjOg
引数$testが echo $test;しても表示されないのはなんでなのかなぁ。
ほんとくだらない質問でごめんなさい。
■ このスレッドは過去ログ倉庫に格納されています