1 名前:nobodyさん [03/03/11 02:34 ID:9JR4latc] PostgreSQLについて語って2万テーブルをめざしましょう。 関連アプリケーション特有の話題は、以下のスレッドへ。 pgsql-mlのヲチもここで。 前スレ [PostgreSQL] pc2.2ch.net/test/read.cgi/php/989375812/ ☆関連スレッド [PHP + PostgreSQL] pc2.2ch.net/test/read.cgi/php/983128806/ [PerlでPostgreSQL] pc2.2ch.net/test/read.cgi/php/999249463/ [MySQL vs PostgreSQL] pc2.2ch.net/test/read.cgi/php/989341364/
101 名前:nobodyさん [03/04/10 18:42 ID:Gvrywi5t] 特定のフィールドを指定してセレクトするのではなく、 逆に、「あるフィールド以外すべてセレクト」というふうなクエリーはかけないのでしょうか?
102 名前:nobodyさん mailto:sage [03/04/10 20:08 ID:???] >>100 where string ~ 'a{3}';
103 名前:102 mailto:sage [03/04/10 20:27 ID:???] ん? 勘違いしてた。
104 名前:nobodyさん mailto:sage [03/04/10 22:07 ID:???] >>103 だよね。できないよね?
105 名前:nobodyさん mailto:sage [03/04/10 22:22 ID:???] >>101 WHERE foo <> 'ある条件';
106 名前:nobodyさん mailto:sage [03/04/11 01:37 ID:???] >>101 105は間違い。 SELECT ~hogehoge WHERE ... チルダをつければいい
107 名前:nobodyさん [03/04/11 01:46 ID:nN51pMH3] >106 そっか!ありがと。試してみます。
108 名前:nobodyさん mailto:sage [03/04/12 16:38 ID:???] >>106 おいおい(w
109 名前:nobodyさん [03/04/12 19:46 ID:UOkuI+UD] 気づくの遅すぎ(藁
110 名前:nobodyさん mailto:sage [03/04/13 15:52 ID:???] >>107 騙されるな SELECT ^hogehoge だぞ
111 名前:nobodyさん mailto:sage [03/04/13 20:29 ID:???] >>107 昔は SELECT !hogehoge と書いたもんだ
112 名前:nobodyさん mailto:sage [03/04/15 14:02 ID:???] >>111 あんたかなりのベテランだな 一部のDBでは SELECT `hogehoge だったころもあるね
113 名前:nobodyさん [03/04/16 13:29 ID:sI0EuNRH] つーか SELECTしたい列名なんて明示的に書くのが王道だろ それとも テーブル設計をコロコロ変えやがるのかと小一時間...
114 名前:山崎渉 mailto:(^^) [03/04/17 12:01 ID:???] (^^)
115 名前:33 mailto:sage [03/04/17 13:09 ID:???] >>35 n 日前のバックアップファイルを削除する、という機能が欲しくなったので付けてみた。 find と xargs コマンドが必要。 find ${BACKUPDIR} -type f -daystart -mtime +${EXPIRE_DAY} |xargs /bin/rm -f 全文は長いので >>116 に張ります。必要ないって? そんなこと言わないで・・・。
116 名前:33 mailto:sage [03/04/17 13:09 ID:???] #/bin/sh # PostgreSQL database backup script # Dump to DATABASE_NAME_YYMMDD.pgdmp. # Delete expired files. # Output log. # Setting TARGET_DB='firstinfo tka' # List target database name. DIR=/home/postgres LOG=${DIR}/pgdump.log BACKUPDIR=${DIR}/dbbackup EXPIRE_DAY=90 # Main routine echo "pg_dump start." `date` >> ${LOG} date=`date +%Y%m%d` for db_name in ${TARGET_DB} do DUMP_FILE_PATH=${BACKUPDIR}/${db_name}_${date}.pgdmp /usr/local/pgsql/bin/pg_dump ${db_name} -b -o -Fc > ${DUMP_FILE_PATH} 2>>${LOG} echo "Database ${db_name} backup complete." `date` >> ${LOG} done echo "pg_dump complete." `date` >> ${LOG} echo "Delete obosolete pgdmp files start." `date` >> ${LOG} find ${BACKUPDIR} -type f -daystart -mtime +${EXPIRE_DAY} |xargs /bin/rm -f echo "Delete obosolete pgdmp files complete." `date` >> ${LOG}
117 名前:山崎渉 mailto:(^^)sage [03/04/20 06:27 ID:???] ∧_∧ ( ^^ )< ぬるぽ(^^)
118 名前:nobodyさん [03/04/23 02:29 ID:b3QZu4Pm] PostgreSQL のデータベースを UTF8 で作ったとき、日本語の入ったカラムに ORDER BY かけると JIS 漢字順ではなくなるのかな?
119 名前:nobodyさん mailto:sage [03/04/23 23:03 ID:???] linさんのコメントにどんな意図があるかは知らないけど サイトのJavaScriptでしばらく楽しんでしまった。。。
120 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
121 名前:nobodyさん [03/04/24 19:29 ID:Q1w3nY2w] 質問です。 複数のカラムを対象に、selectしたいのですが、どう書けばよろしいでしょうか? mysqlだとFull Text Searchとあると思うのですが、Postgresでできますでしょうか?
122 名前:nobodyさん mailto:sage [03/04/25 11:28 ID:???] 管理ツールDbVisualizerってどうよ? www.minq.se/products/dbvis/index.html Javaアプリだけど、個人的には好感触。
123 名前:nobodyさん mailto:sage [03/04/25 12:18 ID:???] >>122 psqlで十分。 エディタもviでいい。 巡回ダウソもwgetでいい。 なんてなぁ、新しいのを覚えられないだけ。 CSE入れてみたけど起動してみて、 さ ぁ ど う し た も の か と 小 一 時 間 ...
124 名前:nobodyさん mailto:sage [03/04/27 05:21 ID:???] >>121 意味わかんね。 select * from table ってやれば複数のカラム対象にselectできてるし。
125 名前:nobodyさん mailto:sage [03/04/27 12:54 ID:???] >>121 Full Text Searchって全文検索? NamazとかKakasiでも使うかしかないんでないの? 全文検索な時点でDBが面倒見ないといけない機能でもないような気がする。 単純に複数カラムにを検索条件に掛けたいなら地道にSQL書きなはれ。 SELECT A.id FROM A,B WHERE A.id = B.id AND A.firstname = "あああ" AND B.adress = "あああ" みたいな。 こんなSQL使う時点で、設計ミスか余計な機能な気もするけど。
126 名前:nobodyさん [03/04/27 21:48 ID:RGglVdIs] psqlからのcopyコマンドで"\N"という文字列がテーブルに入れれない・・・(WITH NULL AS指定はなしで ) "\b"、"\n"、"\."は "\\b"、"\\n"、"\\."に変換すれば入るのに・・・ "\N"は"\\N"に変換してもだめ・・・ "\N"という文字列はだめなんでしょうか?
127 名前:nobodyさん [03/04/27 21:51 ID:ClMbC1OP] >>121 第一正規化、って知っていますか?
128 名前:121 [03/04/27 21:52 ID:u/4ug4s4] >> 124 失礼しました。whereで複数カラムを指定するという意味です。 >> 125 全文検索というと、確かにNamazuとかそういう方向いっちゃいますね。 単純に複数カラムを検索条件にかけたいだけです。 where andでつなぐと遅くなるので、(レコード数が230万件あるので) mysqlのFull Text Searchつかったらと先方にいわれ、いまさら乗り換える のはややこしいので、Postgresでもそういう機能がないかと探しておりま した。 設計ミスか余計な機能ではとありますが、検索対象の列が5つあって、 最初はそれぞれにかければいいという仕様でしたが、5つのどれかに ヒットするようにしなさいと仕様が変更されたのです。 他に方法あるでしょうか? って自分で考えろという感じですが、 いろいろと調べてはいるのですが、思いつきません。。
129 名前:nobodyさん mailto:sage [03/04/27 22:21 ID:???] >>128 ふつうにorすればいいのでは。。。
130 名前:121 [03/04/27 22:41 ID:u/4ug4s4] > 129 すいません、where andではなく、where or で、遅くなるという意味です。
131 名前:nobodyさん mailto:sage [03/04/27 23:03 ID:???] >>128 >設計ミスか余計な機能ではとありますが、検索対象の列が5つあって、 >最初はそれぞれにかければいいという仕様でしたが、5つのどれかに >ヒットするようにしなさいと仕様が変更されたのです。 そんなの、仕様変更されるのが当たり前だな。 仕様変更に対応できるようにしてなかった設計ミス。 ところで、230万件×5の全文検索ってMySQLなら速くできるのかな?
132 名前:nobodyさん mailto:sage [03/04/27 23:07 ID:???] >>130 検索対象のカラムにindexは張ってあるの?
133 名前:122 mailto:sage [03/04/27 23:32 ID:???] >>123 psqlで充分ってか。ある意味うらやますぃ。 個人的には使っていこうと考えているけど、確かにpsqlで充分かもね。
134 名前:nobodyさん mailto:sage [03/04/28 01:11 ID:???] >>132 index張ってあっても、like '%語句%'で検索するなら意味ないと思われ。
135 名前:132 mailto:sage [03/04/28 02:16 ID:???] >>134 あー、likeで%から始まる奴は駄目だね。 ホントに全文検索っぽくやってるとしたら、like '%語句%'ってやってる 可能性は高いか。 121にもうちょっと情報を出してホスィところだなぁ。
136 名前:nobodyさん mailto:sage [03/04/28 11:27 ID:???] where coalesce(列1,'') || coalesce(列2,'') || coalesce(列3,'') like '%検索ワード%'explain してみたら、costは同じだけどrowsは or より少ないよ
137 名前:121 [03/04/28 13:42 ID:carn+S7w] >> 134,135 ご指摘の通り、like '%語句%'とやっております。 実は今からでもテーブルの設計は変更可能なのですが、 どのように変更したらよろしいでしょうか。 今はID,NAME,AA,BB,CC,DD,EEというカラム構成で、 AA,BB,CC,DD,EEの中で、どれかに検索キーワードがあればヒットする というようにしたいです。 >> 136 こちらありがとうございます。 coalesceってこういう時に使うのですね。習ってはいたのですが、 いつ使うんだろと思っていました。勉強になります。
138 名前:nobodyさん mailto:sage [03/04/28 15:37 ID:???] >>121 >>127
139 名前:nobodyさん mailto:sage [03/04/29 11:45 ID:???] textの部分一致は、例えば「abcdefg」という文字列があったとして、 like '%cd%' とすると遅くなるから、 abcdefg bcdefg cdefg defg efg fg g というテーブルを別に作って、like 'cd%' すると速くなるよ、と 言われたことがある。もちろん、インデックス作って。 実際自分でやってみたことはないが。
140 名前:121 [03/04/29 18:01 ID:JKdqeuMi] >> 127 正規化については、こちらを読みました。 www.rfs.jp/sitebuilder/sql/01/06.html 今回のケースとは特に関係ないかと思うのですが、私の洞察力不足でしょうか。 >> 139 ありがとうございます。 そこまでやると複雑になるので、おとなしくMySQLに移行するかと思って しまいます。。
141 名前:nobodyさん [03/04/29 19:13 ID:8zWvKIjl] my.vector.co.jp/servlet/System.FileDownload/download/ftp/0/281853/pack/win95/game/table/pachinko/SUTING.LZH
142 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
143 名前:しろ mailto:sage [03/04/30 09:50 ID:???] >140 > 正規化については、こちらを読みました。 > www.rfs.jp/sitebuilder/sql/01/06.html > 今回のケースとは特に関係ないかと思うのですが、私の洞察力不足でしょうか。 今回のケースと関係あるかないかどうかは「ID,NAME,AA,BB,CC,DD,EE」では判りません。 NAME,AA,BB,CC・・・が、名前、住所、電話番号、メールアドレス・・・などだったら この部分に関しての正規化の必要はないかもしれません。 しかし、NAME,AA,BB,CC・・・が、担当者、商品名A、商品名B、商品名C・・・などだったら 必要ありますね。 とうわけで、あなたの洞察力不足かどうかは、構造がわからないので なんともいえないです。
144 名前:nobodyさん mailto:sage [03/04/30 14:44 ID:???] 正規化汁!と言ったひとの早とちりでしょう。
145 名前:121 [03/04/30 22:31 ID:0656yZRu] >> 143 NAME,AA,BB,CC・・・は、担当者、商品名A、商品名B、商品名C・・・という 構造です。特にカラムが一緒ではないので、正規化は関係ないかと思うのですが、、、 ちがいます?
146 名前:nobodyさん mailto:sage [03/04/30 22:44 ID:???] >>145 それって、担当者「NAME」が最近扱った商品A、B、C、Dとか…? そういうパターンだったら正規化の対象だと思ふ。
147 名前:146 mailto:sage [03/04/30 23:01 ID:???] (担当者テーブル:tantou) id,name,address,tel… (担当者id,担当者名,住所,電話番号…) (商品テーブル:item) id,name,price,registrant_id,regist_date… (商品id,商品名,価格,登録者id,登録日時…) SELECT tantou.name, tantou.address, item.regist_date FROM tantou, item WHERE tantou.id = item.registrant_id AND tantou.name = "AAA" AND item.name like "%BBB%" みたいな感じにはなんないでしょうか? NAME,AA,BB,CC・・・は、担当者、商品名A、商品名B、商品名C というカラムにならないといけない状況があまり想像つきませぬ。。
148 名前:146 mailto:sage [03/04/30 23:06 ID:???] 最近の5件だったらこうか…。 (憶測しすぎだったらスマソ) SELECT tantou.name, tantou.address, item.regist_date FROM tantou, item WHERE tantou.id = item.registrant_id AND tantou.name = "AAA" AND item.name like "%BBB%" ORDER BY item.regist_date LIMIT 5
149 名前:nobodyさん mailto:sage [03/05/01 20:08 ID:???] PostgreSQLってテーブル名とかフィールド名が大文字英数だと、 SQL書くときテーブル名, フィールド名をダブルクォーテーションで くくらないといけないんだな。 なんでこんな仕様になってんだ?
150 名前:nobodyさん mailto:sage [03/05/02 09:43 ID:???] >>149 それは予約語とかぶった時の話では?
151 名前:nobodyさん mailto:age [03/05/02 20:04 ID:???] 2つのテーブルの両方のカラム(同じなまえ)にデータが存在するかどうかを 確認するために以下のようにしているのですが、うまくいきません。 どこか間違っているのでしょうか? SELECT 1 FROM TBL1, TBL2 WHERE TBL1.ID!='hoge' AND TBL2.ID!='hoge'; SELECT 1 FROM TBL1, TBL2 WHERE TBL1.ID='hoge' OR TBL2.ID='hoge';
152 名前:nobodyさん [03/05/02 20:54 ID:ixQKgJiY] >>151 intersect
153 名前:nobodyさん mailto:sage [03/05/02 20:57 ID:???] >>151 上は「両方ともhogeじゃない」 下は「TBL1のIDがhogeもしくはTBL2のIDがhoge」
154 名前:nobodyさん mailto:sage [03/05/02 21:05 ID:???] SELECT 1 FROM TBL1, TBL2 WHERE TBL1.ID = TBL2.ID AND TBL1.ID = 'hoge';
155 名前:402 mailto:sage [03/05/03 00:55 ID:???] >>149 大文字の混ざった識別子をダブルクォートするのは PostgreSQLの仕様というよりSQL92の仕様のはずです。
156 名前:nobodyさん mailto:age [03/05/04 18:28 ID:???] ここで聞くのが適当かどうかわかりませんが、まったく同じSQLでWeb上からの アクセス結果とスクリプトやコマンドインタプリタからのSQL実行結果 とが違うので悩んでおります。以下がそのSQL文です。 SELECT 1 WHERE EXISTS(SELECT 1 FROM TBL1 WHERE ID='hoge') OR EXISTS(SELECT 1 FROM TBL2 WHERE ID='hoge'); Web上からの処理結果がうまく表示されません。それぞれ2つのSQLだとWeb上 でもうまく表示されるのですが・・・ 因みに mod_perl を使っていますが、きちんと use strict して変数はすべて my で 宣言しています。もちろん grant もしています。
157 名前:nobodyさん [03/05/05 00:34 ID:V6Q641Ow] >>156 何か見るからに変なSQL書いてるな。 具体的に何がどう違う結果になってるのか書け。 あと全部Perlで試しているのか?それともpsqlか?
158 名前:nobodyさん mailto:age [03/05/05 00:40 ID:???] >>157 コンソールからはPerlで書いたスクリプトで、存在しているIDをときはきちんと 1を返します。 psql(コマンドインタプリタ)からでも同じSQLだと同じ1を返します。 ただ、Web上からPerlで書いたCGIに同じSQLを実行させた結果、0を 返します。因みにDBIとDBD−Pgを使って永続接続させています。
159 名前:nobodyさん mailto:sage [03/05/06 16:42 ID:???] >>158 文を SELECT 1 WHERE true; みたく単純にしてみて、同じコトをやってみたら?
160 名前:nobodyさん mailto:sage [03/05/10 12:46 ID:???] >>158 PostgreSQLに接続するユーザーの問題では? ユーザーを明示的に指定してやったらどうよ?
161 名前:nobodyさん [03/05/13 09:51 ID:77a0e79m] プログラミングではなく、運用の質問なんですが、 Postgresの監視って、プロセス上がってるかどうか 程度でいいですかねぇ?
162 名前:nobodyさん mailto:sage [03/05/13 11:44 ID:???] >>161 ・プロセスあがってるかどうか監視 ・最大プロセス超えてないかどうか監視 ・クエリーの応答時間が甚だしく増えていないかどうか監視 くらいじゃねーの? ディスク容量とかも必要かも試練が こっちは鯖の監視の範疇に入るかな
163 名前:nobodyさん [03/05/13 11:47 ID:sZdPhQWk] >>161 接続できるかどうかぐらいはテストしたら?
164 名前:161 [03/05/13 17:15 ID:77a0e79m] >>162 サンクスです。 >>163 シェルで一発で済ましてしまいたんですよ。 ベンダにやってもらうので そこまでやってもらうと お金の問題が出てきそうなんですよね。 mysqladmin pingみたいのがあれば と思ったんですが・・・・・・。 ありがとうでした。
165 名前:nobodyさん [03/05/14 05:36 ID:aknt5UHd] 原因がまったく解明しないため、質問させていただきます。 今までどおり、 if($r->resultStatus ne PGRES_TUPLES_OK){ return 0; } このようにselectが正常にとおってるかサブルーチン内で チェックさせていたのですが、ある時からなぜか PGRES_TUPLES_OKがそのまま「PGRES_TUPLES_OK」 となってしまい、この照合も「2 ne PGRES_TUPLES_OK」 となり、照合エラーとなってしまいます。 考えられる原因があれば、どうかご教授ください。 よろしくお願いいたします。
166 名前:nobodyさん mailto:sage [03/05/14 07:26 ID:???] >>165 この情報からだとスペルミスか、何らかの理由で定数のimportが できなかったのかというくらいしか思いつかんが。 原因はわからんが、そういうミスを事前にチェックできるよう、use strict; を 使うのが常識。あと、PGRES_TUPLES_OKは整数なので、比較は ne じゃ なくて != でよい。
167 名前:165 [03/05/14 21:34 ID:aknt5UHd] 原因が判明しました。しかし、その意味がどうしてもわかりません。 if($r->resultStatus ne PGRES_TUPLES_OK){ return 0; } という処理は「db.pl」というファイルの中のサブルーチン「db_command」 内で行っていたのですが、このファイルのパッケージ名を「db(package db;)」 としました。 違うファイル「select.cgi」より「db.pl」をrequireし、サブルーチン 「db_command」を「db::db_command($sql)」と呼び出していたの ですが、この呼び出し方に問題がありました。 パッケージ管理せず、「db_command($sql)」と呼び出すと、結果が 返ってきます。strictでも何にもエラーがはかれません。 原因はわかりましたが、その意味が不明です。 勉強不足で申し訳ないです。
168 名前:165 mailto:sage [03/05/14 23:48 ID:???] またもや自己解決。。。ようやくわかりました。 Pg::PGRES_TUPLES_OK これだけです。これで解決しました。 いろいろと失礼致しました。
169 名前:nobodyさん [03/05/18 19:21 ID:EvuGQeIP] 「40万件有るデー」って、いなかのスーパーの安売りみたいですね。
170 名前:nobodyさん mailto:sage [03/05/18 20:08 ID:???] >>169 漏れは関西弁かとおもたYO!!!
171 名前:nobodyさん mailto:sage [03/05/18 20:08 ID:???] しょーもないカキコでageるなコラ。
172 名前:nobodyさん [03/05/18 21:06 ID:5+xOckh5] PostgreSQLはなんでshift−jisのエンコーディングをサポートしてくれないの?
173 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
174 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
175 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
176 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
177 名前:nobodyさん mailto:age [03/05/19 20:20 ID:???] UNIX積算秒を timestamp型にUPDATE文でセットするにはどのような方法があるのでしょうか? マニュアルの date_trunc() や timestamp() 関数を見てもそれらしいのが見あたら なくてなやんでいます。
178 名前:nobodyさん [03/05/20 20:28 ID:tVu/NkZD] すんまそん、 緊急の為、過去ログ見ないで聞きます 文字コードを設定する方法を教えてくだつぁい 困りはてました・・・ 環境はapache(Linux)+PostgreSQL+PHP もう日本語めひゃくひゃ・・・
179 名前:nobodyさん [03/05/20 22:01 ID:7LQQ/2dr] PostgreSQL 7.3.2 付属ドキュメント www.postgresql.jp/document/pg732doc/
180 名前:nobodyさん mailto:sage [03/05/20 22:13 ID:???] 緊急で 文字コードを設定する方法を教えてくだつぁい って疑問にぶち当たるシチュエーションってのが想像つかん。
181 名前:nobodyさん [03/05/20 22:43 ID:mI4NkyBO] Serialを指定したテーブルからNextValの値を取得したいと 思っています。 Javaで行う場合に、 REsultSet rs = executeQuery("select nextval('zzz_id_seq')"); としているのですが、これからどのように取得すればいいのでしょうか? それとも、根本的に取得の方法が間違っていますか?
182 名前:nobodyさん mailto:sage [03/05/20 23:42 ID:???] >>178 名前の欄に fushianasan と書けばOKです!!!
183 名前:山崎渉 mailto:(^^) [03/05/22 01:59 ID:???] ━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
184 名前:nobodyさん [03/05/22 10:32 ID:JcOANcCI] オマイら dbの容量計算の仕方教えて下さい。
185 名前:nobodyさん mailto:sage [03/05/22 14:27 ID:???] >>184 select count(*) from hogehoge;
186 名前:nobodyさん [03/05/24 20:17 ID:aDXBSjIE] ポスグレ!
187 名前:nobodyさん mailto:sage [03/05/24 23:21 ID:???] ( ゚-゚)b
188 名前:nobodyさん mailto:sage [03/05/24 23:26 ID:???] 略すなYO!!!
189 名前:nobodyさん [03/05/27 10:31 ID:oAIrGLTh] select count(*) from hogehoge; って件数じゃん
190 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
191 名前:nobodyさん [03/05/27 13:02 ID:ehUv/K+8] で、hogehogeってなに?
192 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
193 名前:nobodyさん mailto:sage [03/05/27 13:44 ID:???] (´-`).。oO(いつもながらツッコミが遅いです・・・)
194 名前: mailto: [03/05/27 15:44 ID:???] (1) create table t1 (ts timestamp); ってしますよね。で、日本時間15:37ごろに (2) insert into t1 values (now()); ってしますよね。で、 (3) select * from t1; ってやると 2003-05-27 15:37:54.748034 んな感じで値が帰ってくるかと思うのですが、 (4) これを php から epoch 形式で取得して、date() 関数に渡すと 28日の0時になってしまいます。 これは↑のうちのどこが悪いのでしょう?
195 名前:nobodyさん [03/05/27 17:46 ID:dZ0fIA92] 次のようなテーブルがあるとして、思ったような 操作ができずに困っています。どなたかよい方法を ご存知の片がおられましたら、教えてください。よろしくお願いします。 下のようなテーブルがあったとします。 Id name point date 1 あ 5 5月1日 2 い 1 5月16日 3 う 22 5月5日 4 え 0 5月27日 5 お 10 5月26日 このテーブルから、例えば本日が5月27日だとすると 本日から3日以内のdateのものを優先的に取得し、 そのレコードより後ろに、それ以外のデータを pointの降順で並べたいのです。
196 名前:195の続き [03/05/27 17:46 ID:dZ0fIA92] つまり上の例からSQL文で取得した結果を id name point date 4 え 0 5月27日 (3日以内のものが上にきている) 5 お 10 5月26日 (3日以内) 3 う 22 5月5日 (↓それ以外はpointの降順) 1 あ 5 5月1日 2 い 1 5月16日 という風にしたいのです。しかし、SQL文が思いつきません。 select * from ( (select * from テーブル名 where (検索条件) and dateが3日以内 ) UNION (select * from テーブル名 where (検索条件) ) ) order by date desc , point desc; のようにしても、dateの降順になるだけでした。 (検索条件)というのは今回ある条件でレコードを引っ張ってくるので その条件のことなのですが、これは非常に処理が重く なんとか1回ですませられないかとも思っています。 長文になってしまいましたが、アドバイスをよろしくおねがいします。 あつかましくてすみません・・・
197 名前:nobodyさん mailto:sage [03/05/27 18:23 ID:???] >>196 UNIONって実践で使おうとして結局ボツにした事しかないから あんまり詳しい挙動は良くわかんないんだけど、 (select * from テーブル名 where (検索条件) and dateが3日以内 ) と (select * from テーブル名 where (検索条件) をくっつけるってことは、distinctかけるか"(検索条件)and dateが3日以上前" にしないと重複行がでるような。。 あと、"くっつけた後"のレコードに対してorder by date desc , point desc;してるんだから、 この時点で3日以内のレコードが一番上とか関係ないし。 (select * from テーブル名 where (検索条件) and dateが3日以内 ) という結果と (select * from テーブル名 where (検索条件) and dateが3日以上前 order by date desc , point desc); という結果をUNIONしないとだめっぽ。 それ以前に、単純に新しい日付順に並べるのが一番楽だろうになんでまたこんな奇怪な 仕様になってるんですか? 印刷するにしてもブラウザに表示するにしても、一言注意書きが必要になっちゃうような インターフェースは避けるべきかと。 日常的に直近3日のデータしか使わないようなら、(Webアプリなら)直近3日を表示するページを作って、 全体表示をするページへのリンクを貼るようにするとか仕様変更も検討しては?
198 名前:nobodyさん mailto:sage [03/05/27 19:33 ID:???] 今197がいいこと言った!!!
199 名前:nobodyさん [03/05/28 12:30 ID:37obhOpS] >>196 select * from (select *,1 AS tmp from テーブル名 where (検索条件) and dateが3日以内 ) union (select *,2 AS tmp from テーブル名 where (検索条件) order by tmp, date desc , point desc ってのは?
200 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん