![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
プログラム初心者です
シンプルな掲示板をつくりました
ホームページのトップページに新しく書き込まれたスレッドを表示したいです
bbsに書き込まれたらbbsテーブルに行番号を付けてどんどんインサートしていくようにしてます
トップページはindex.phpです
id
(オートインクリメントでつけた行番号)
sure_id
(タイトルごとのid。これでタイトルごとにまとめています)
mes
書き込まれた文章
name
書いた人の名前
time
型はdatetimeです(書き込まれた日付)
bbs番号3番のスレ
2番目の書き込み 2013-09-12←これが新着で取得したい値
1番目の書き込み 2013-09-10←なぜかこちらを取得してしまう
下記のようにindex.phpで表示したいです
bbs番号3番のスレが2013-09-12
しかしやってみたら新着順にはなるものの3番目のレスの古いほうから値を取得していました
SELECT * FROM bbs GROUP BY sure_id ORDER BY MAX(time) DESC LIMIT 1,10
bbs番号3番のスレが2013-09-10
bbs番号5番のスレが2013-09-11
bbs番号6番のスレが2013-09-09
こうなるようにしたいです
bbs番号3番のスレが2013-09-12 ←最新の書き込まれたスレッドのなかから一番新しい日付を表示したい
bbs番号5番のスレが2013-09-11
bbs番号6番のスレが2013-09-09
よろしくお願いします
No.4ベストアンサー
- 回答日時:
はて?おかしいですね
サブクエリの部分
select sure_id,max(dt) from bbs group by sure_id
だけ実行すると
1 2014-01-04 19:19:45
2 2014-01-12 01:37:03
5 2014-01-04 18:30:47
6 2014-01-03 19:02:26
が返ってきますよね?
であればそれで絞り込んでいるので重複がでるはずがないのですが・・・
(完全にスレッド番号と日時が同じであればダブるのでその場合は
distinctするなりする必要はあるかも)
なにか特殊な処理を別途施していたりしませんか?
すいません。テーブル名を変更してテストしてみたんですが半分だけテーブル名を変更してませんでしたorz
訂正したらうまくいきました。ありがとうございました(_ _)
No.3
- 回答日時:
もしこんな感じであれば
create table bbs(id int not null primary key auto_increment,sure_id int,mes text,name varchar(20),dt datetime);
insert into bbs(sure_id,mes,name,dt) values(
2,'・・・','名無しさん','2014-01-03 19:00:29'),(
6,'・・・','名無しさん','2014-01-03 19:02:26'),(
2,'・・・','名無しさん','2014-01-03 19:19:45'),(
5,'・・・','名無しさん','2014-01-04 18:30:47'),(
1,'・・・','名無しさん','2014-01-04 19:19:45'),(
2,'・・・','名無しさん','2014-01-11 23:03:08'),(
2,'・・・','名無しさん','2014-01-12 01:37:03');
スレッドごとの最新日付順の表示はこう
select * from bbs
where (sure_id,dt) in(
select sure_id,max(dt) from bbs group by sure_id
)
order by dt desc
回答ありがとうございます
やってみたのですが、日付の新しい順になっていますが、スレッドのレスが重複しているものが表示されてしまいました
7 2 ・・・ 名無しさん 2014-01-12 01:37:03
6 2 ・・・ 名無しさん 2014-01-11 23:03:08
4 5 ・・・ 名無しさん 2014-01-04 18:30:47
3 2 ・・・ 名無しさん 2014-01-03 19:19:45
2 6 ・・・ 名無しさん 2014-01-03 19:02:26
1 2 ・・・ 名無しさん 2014-01-03 19:00:29
下記のものと同じような結果になってしまいました。なかなか難しいです
SELECT * FROM bbs ORDER BY dt DESC LIMIT 10
理想はこんな感じです。スレッドごとに書き込まれた最新の名前とレスを取得できればと思っています(最初のid番号は表示しないのでバラバラでも関係ないです)
7 2 ・・・ 名無しさん 2014-01-12 01:37:03
4 5 ・・・ 名無しさん 2014-01-04 18:30:47
2 6 ・・・ 名無しさん 2014-01-03 19:02:26
もしくはこんなかんじです(最新の10件の中でスレッドごとにまとまっている)
7 2 ・・・ 名無しさん 2014-01-12 01:37:03
6 2 ・・・ 名無しさん 2014-01-11 23:03:08
3 2 ・・・ 名無しさん 2014-01-03 19:19:45
1 2 ・・・ 名無しさん 2014-01-03 19:00:29
4 5 ・・・ 名無しさん 2014-01-04 18:30:47
2 6 ・・・ 名無しさん 2014-01-03 19:02:26
No.2
- 回答日時:
#1です。
書きようが悪かったですね。すみまぜん。> ORDER BY MAX(time) DESC
なぜorderbyに集合関数 ?
取り除くと、どうなりますか?
とは
ORDER BY time DESC
として欲しかったんです。
ORDER BY time DESC にしてみたのですがうまくいきませんでした。
SELECT * FROM bbs GROUP BY user_id ORDER BY time DESC LIMIT %d
スレッド5名無しさん2014-01-04 18:30:47 ←古いスレッドが上にきました
スレッド6名無しさん2014-01-03 19:02:26 ←古いスレッドが上にきました
スレッド2名無しさん2014-01-03 19:00:29 ←このスレッドが最新の日付でなくなっている
グループもはずしてみると日付の新しい順になりますが、重複が出てしまいます
SELECT * FROM bbs ORDER BY time DESC LIMIT 10
グループをはずしてみると最新順になりますがこんな結果になります
スレッド2名無しさん2014-01-12 01:37:03 ←この最新の日付で表示したい
スレッド2名無しさん2014-01-11 23:03:08 ←ダブっている(これを非表示)
スレッド1名無しさん2014-01-04 19:19:45
スレッド2名無しさん2014-01-03 19:19:45 ←ダブっている(これを非表示)
こんな結果にしたい
スレッド2名無しさん2014-01-12 01:37:03 ←この最新の日付で表示したい
スレッド1名無しさん2014-01-04 19:19:45
こうゆう表示ができるならこれでもいいです(最新の10件以内に連続してスレッドごとにまとまっている)
スレッド2名無しさん2014-01-12 01:37:03 ←この最新の日付で表示したい
スレッド2名無しさん2014-01-11 23:03:08 ←ダブっているけどスレッドごと
スレッド2名無しさん2014-01-03 19:19:45 ←ダブっているけどスレッドごと
スレッド1名無しさん2014-01-04 19:19:45
No.1
- 回答日時:
> ORDER BY MAX(time) DESC
なぜorderbyに集合関数?
取り除くと、どうなりますか?
列名は工夫して、予約語っぽいものは避けたほうが無難
回答ありがとうございます
ORDER BY MAX(time) DESCこれを削除すると普通にスレッド一覧を表示するだけになりました
新着順でもなくなってしまいました
>なぜorderbyに集合関数?
ここで教えてもらった方法です
テーブル一個でsure_idごとにスレッドを作っています
新着レスがあったらトップで一番上にスレッド一覧を並び替えて同時に最新レスを表示したいです
イメージ的にこんな感じを創造しています
スレッド1タイトル スレッド1の中の最新レス ←これが一番新しい投稿
スレッド2タイトル スレッド2の中の最新レス
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) 【VBA】A列の指定した値と同じ行にあるD列の値を順番にコピペするマクロについて 4 2023/02/01 18:16
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- 戸籍・住民票・身分証明書 マイナンバーカードの更新について教えてくださいな マイナンバーカード更新の時期が来たので携帯で済ませ 2 2023/07/31 01:47
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Access(アクセス) ACSESS初心者です マンション管理をACCESSで出来ないかとチャレンジしています。 リレーショ 3 2022/10/08 11:45
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マイクラPC版のコマンドで効率...
-
副問合せの書き方について
-
SQLについての質問
-
貝を買って中から死にかけのカ...
-
インスタの名前でかっこいいと...
-
MYSQL PERL からの抽出について
-
一つ前のレコードの値と減算し...
-
クエリ表示と、ADOで抽出したレ...
-
SQL文で、一部一致した列だけ抽出
-
主キーレコードを削除する場合
-
別テーブルからSELECTした値を...
-
複数JOINしているとCOUNTが正し...
-
1テーブル&複数レコードの更新...
-
mysqlで2つのテーブルを使った...
-
HAVING count()で重複したデー...
-
ダイソンのサイクロン掃除機「...
-
別のDB(Table)からの複数行の...
-
MySQL UPDATE SETが失敗なのに...
-
上位3位を求めるSQL文は?
-
ウイルスバスター2005への...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
SQLサーバから、項目の属性(型...
-
副問合せの書き方について
-
VIEWの元のテーブルのindexって...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
select文のwhere句に配列を入れ...
-
sqlで、600行あるテーブルを100...
-
ある条件の最大値+1を初番する...
-
Unionした最後にGROUP BYを追加...
-
inner joinをすると数がおかし...
-
期間の重複を調べるSQL文につい...
-
クエリ表示と、ADOで抽出したレ...
-
Access パラメータクエリをcsv...
-
PL/SQLの変数について
-
MySQLのDATE型カラム値がNULLの...
-
php+mysqlで複数選択削除について
-
上位3位を求めるSQL文は?
おすすめ情報