- ベストアンサー
思うようにレコードの並び替えができません。
現在、PHP+MySQLで掲示板作成を行っております。色々と調べたものの、どのようなSQL文で実行すれば良いかが分からなかったため質問をさせていただきました。 掲示板の種類は、返信記事がぶら下がっていくタイプです。 親記事1 ┣子記事1-1 ┗子記事1-2 親記事2 ┠子記事2-1 ┗子記事2-2 フィールドの内容は以下のようなものを考えていますが、必要があれば追加変更したいと思っています。 テーブル:message id(ユニーク値)|parentNo(親記事の番号)|groupNo(同一親記事に付く子記事の並び順)|title 1|1|0|親記事1 2|1|1|子記事1-1 3|2|0|親記事2 4|2|1|子記事2-1 5|1|2|子記事1-2 6|2|2|子記事2-2 表示する順番の条件 i)親記事が書き込まれるとその親記事を最上位に表示 ii)ある親記事に対しての返信があると、その親記事と共に最上位に表示 例)6番目のレコード「子記事2-2」が書き込まれると、1番目のレコード「親記事1」よりも上に表示する select id, parentNo, groupNo, title from message order by parentNo, groupNo; とすると、 1|1|0|親記事1 2|1|1|子記事1-1 5|1|2|子記事1-2 3|2|0|親記事2 4|2|1|子記事2-1 6|2|2|子記事2-2 と表示されるものの、最後の書き込みの「子記事2-2」を含む「親記事2」が「親記事1」よりも下に来てしまい、意図する順番と異なって表示されてしまいます。 select max(id), parentNo, groupNo from message group by pNo order by id desc; とすると、 6|2|0|親記事2 5|1|0|親記事1 と表示されるので、それを利用すれば、という考えはあるのですが、フィールドの追加等を行い、MySQLだけを駆使して意図する順番通りにデータを取得することはできますでしょうか? 厳しい場合にはPHPで調整をしようと思っています。 お答えをよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- moon_night
- ベストアンサー率32% (598/1831)
- wakame0729
- ベストアンサー率32% (245/765)
関連するQ&A
- 複数のSQLを合体させる方法
環境:XP&Apache2&MySQL5&PHP5 examinというテーブルがあります。 全部で80レコードあり、このうちの20レコードを任意に表示させます。 $qq ="select * from examin ORDER BY RAND() LIMIT 20"; $qu = mysql_query($qq); while($ro=mysql_fetch_assoc($qu)) { ここまでは出来るのですが、 examinのフィールドに表示させる順番を持たせ、(grpaというフィールド名にしました) 例えばgrpaが値1のもの(実際は4レコード)を任意に1レコード最初に表示させ、 grpaが値3のもの(実際は3レコード)を任意に1レコード3番目に表示させ、 grpaが値20のもの(実際は6レコード)を任意に1レコード20番目に表示させる、 という方法がわかりません。 $qq1 ="select * from examin where `grpa`=1 ORDER BY RAND() LIMIT 1"; $qu1 = mysql_query($qq1); $qq2 ="select * from examin where `grpa`=2 ORDER BY RAND() LIMIT 1"; $qu2 = mysql_query($qq2); -- $qq20 ="select * from examin where `grpa`=20 ORDER BY RAND() LIMIT 1"; $qu20 = mysql_query($qq20); とやって最後に while($ro=mysql_fetch_assoc($qu)) { の$quの部分を加工すればいいのかな、とも思いますが、 どうすればいいか思いつきません。 アドバイスいただけると幸いです。
- ベストアンサー
- PHP
- 平仮名の並び替えについて
select 表示するフィールド名 from テーブル名 order by 並び替え対象のフィールド名; と入力して「い こ た あ な」を並び替えしたのですが「な あ い こ た」となり「な」が上手く並び替えできませんでした。何が間違えているのか分からないので教えてください。
- ベストアンサー
- MySQL
- カテゴリテーブルの並び替え
カテゴリテーブルを以下のように持っているとします id(自動連番) parent(親は0、子は属する親のid) name(カテゴリ名) order(並び順) 並び順は親が0から連番が振られていて、子は属する親毎に0から連番が振られています。 例えば以下のようなデータです。 id | parent | name | order 1 | 0 | 食べ物 | 1 2 | 0 | 飲み物 | 0 3 | 0 | その他 | 2 4 | 1 | 米 | 0 5 | 2 | 水 | 0 6 | 3 | 炭 | 0 7 | 1 | パン | 1 このときに、親カテゴリにに続いて子カテゴリが表示され、その次にorder順の親、子という表示方法にするには、どのように抽出すればよいでしょうか。 ○理想の並び順 飲み物 水 食べ物 米 パン その他 炭 できれば、後でいろいろと並び替えたりもしたいので、orderの後にSELECT時にフィールドを追加して、サブクエリとして使えるようなSQL文だと嬉しいのですが。 言わんとしている事が伝われば良いのですが、おわかりになる方よろしくお願いします。
- 締切済み
- MySQL
- 複数レコードを1つにまとめる
いつもお世話になっております。(Access2016使用) 複数レコードを1つにまとめたいと思っております。 https://jamfunk.jp/wp/?page_id=1660 上記のHPを参考にクエリ2に以下の式を作ったのですが、添付のエラーメッセージが表示されてしまいます。 どのようにしたらよろしいでしょうか? expr1: dbselect("SELECT FileName FROM クエリ1 WHERE 1 ORDER BY ソートキー;",",") 【データ元】 クエリ名:クエリ1 フィールド名:FileName s1 h1 STPVNVSH こんな感じでデータを表示したいです → s1h1STPVNVSH
- ベストアンサー
- Visual Basic
- [MYSQL] GROUP BY による結果レコードの取得について
こんにちは。 今回は MYSQL の GROUP BY によって、複数レコードのグループ化を行った場合についてお尋ねしたいです。 id, val という二つのフィールドをもつテーブルがあったとして、複数レコードに対して、id でグループ化を行うとします。 その時、val の合計を求めたいのですが、 SELECT id,SUM(val) FROM tablename GROUP BY id となる SQL構文により SUM(val) を取得します。 この場合、SUM(val) を降順にソートした結果レコードを得ることはできますでしょうか? 通常は ORDER BY を用いてこれを行うと思うのですが、このケースではよくわかりません。 また、PEAR によって、これらの結果レコードを連想配列で取得しようと思っています。 結果レコード $rs に対して、 $data = $rs->fetchRow(DB_FETCHMODE_ASSOC); とすると、 $data の連想配列のキーが SUM(val) となってしまいます。 変数に括弧が含まれるのは具合がよくないので、これらを回避する方法はありませんでしょうか? 以上2点おわかりの方がいればお答えいただけないでしょうか。
- ベストアンサー
- PHP
- Selectした時のレコードの取得順
SQL Server2005 で開発しています。 Order by で並び替えてレコードをSelectする際に、 Order by の対象列データが同じ場合は、 どういった順番でレコードが取得できるのでしょうか? TableA No | Data1 | Data2 1| AAA | 100 2| AAA | 200 3| AAA | 300 4| ABC | 400 5| BBB | 500 (Noはクラスタ化PK) 例えば、上のようなテーブルから次のSQLを実行すると (1)Select * From TableA ; (2)Select * From TableA Order by Data1 Asc; (3)Select * From TableA Order by Data1 Asc, No Asc; (1)(2)(3)全て、次の順で返ってきました。 1| AAA | 100 2| AAA | 200 3| AAA | 300 4| ABC | 400 5| BBB | 500 しかし、(2)のSQLは、データによって 次の順で返ってくることがありました。 3| AAA | 300 1| AAA | 100 2| AAA | 200 4| ABC | 400 5| BBB | 500 1~3レコード目までは全てData1がAAAのレコードですが 特に指定していなくても、No(PK)の順になるのかと思っていました。 なお、レコードができた(Insert順)でもなさそうです。 この、順番は何で決まっているのでしょうか?
- ベストアンサー
- SQL Server
- group byで最後のレコードを抽出したい
group byで特定のカラムをまとめる際に、最後(最新)のレコードを抽出したいのですが 最初(古い)の行が抽出されてしまいます。 例えば、threadカラムとuptimeカラムがあるテーブルBBSで threadカラムをgroup byでまとめる際にuptimeの降順(desc)でまとめたい場合 どのようにしたらいいでしょうか? 【テーブルBBS】 id thread uptime 1 1 1230100000 2 2 1230200000 3 1 1230300000 4 3 1230400000 5 1 1230500000 6 2 1230600000 select * form bbs group by thread order by uptime desc だと thread uptime 3 1230400000 1 1230300000 2 1230200000 になってしまいます。 次のような結果を表示するにはどのようにしたらいいでしょうか。 thread uptime 2 1230600000 1 1230500000 3 1230400000 また、DISTINCTを使うと同じフィールド内に重複したレコードがある場合は最初のレコードのみ表示されますが、最後のレコードのみ表示するにはどのようにすればいいのでしょうか? よろしくお願い致します。
- ベストアンサー
- MySQL
- 並び変えについて教えてください
(ID, name, age)という3つのデータがあり、 それを select * from mydb order by name とすると名前順にできるのですが 同名の人の場合は年齢順に表示させたいのですが どうしたら出来ますか?
- ベストアンサー
- MySQL
- レコードセットのリターンについて
プログラミング初心者です。 基本的な質問です。 教えてください。 例えば Select name, id from kaaisha order by id descという SQL文を Vbscriptで生成したRecordsetオブジェクトでOpenした時というのは、 idが最上値のレコード1行のみ返すのでしょうか? それともこの場合、降順で全てのレコードを返すのでしょうか? よろしくお願いします。
- ベストアンサー
- Microsoft ASP
お礼
まだまだSQLの勉強がたりずに、どのようにするのが効率が良いかなど分からないので、まだまだ勉強したいと思っています。 遅くなり申し訳ありませんが、お答えありがとうございました。