$sql = "select * from table_namae where no = 115 order by jikan desc";
の場合、上から何番目か知る方法がわからん。
時間でソートして、そのnoが上から何番目かを知りたい。
もちろん、レコードの値も欲しい。
NO 115を検索して
タイトル 名前 パスワード
→ 時間でソートして上から?番目
noはPRIMARYで重複する値はなく常に一つだけ。
SQLで値を得る事は、無理?
noは特にその都度変わるので、limitは使えないと思うんですが。
PHPなら、ソートして最初から希望のナンバーまでのレコードを取得。
$i = 0;
while($col = mysql_fetch_array($rst)){$i++;
if(希望のナンバー){
print "$i番目";
print "タイトル、名前さん。"} }
これでも、取得できるけど、無駄なループになるし。
No.3ベストアンサー
- 回答日時:
ちょっと、タイプミスが、
SELECT T1.no, T1.name, T1.title, T1.jikan, COUNT(T2.no) as bangou
FROM table_namae as T1,
table_namae as T2
WHERE T1.no = 115
AND T1.jikan >= T2.jikan
GROUP BY T1.no;
こっちです。
質問の意図を読み間違えてなければ、これでばっちり。
いろいろといじった結果。
挙動の内容が分かりません。
いや、結果はokなンすけど。
SELECT T1.no, T1.name, T1.title, T1.jikan,
//上記のフィールドを表示させる
COUNT(T2.no) as bangou
//bangouをカウントする
//↑なにをカウントしてる?
//理屈としては、T1.jikan >= T2.jikanの場合はカウントしてるんだろうけど
//と、言う事はループしてる?どこが?なにが?
//COUNT(*)としないのは、重さ軽減のため?
FROM table_namae as T1, table_namae as T2
//テーブルをT1,T2とする
WHERE T1.jikan >= T2.jikan
//T1.jikan >= T2.jikan を比較ループしてる?
//WHERE文って、ループしないですよね?
//検索上から下まで1回では、無理な気もします。
GROUP BY T1.no
//GROUPでまとめる
ORDER BY bangou;
//bangou順にソート
WHERE T1.jikan >= T2.jikanで抽出して、COUNT(T2.no)してるんだろうけど、SQL側の挙動が最終的に分かりません。
本来の問題は解決しているのですが、知識のある方どなたでもいいので、教えて頂けると、すっごい助かります。^^;
No.5
- 回答日時:
付き合ったついでに・・・
SQLを考えるときには、ループなどで考えてはいけません。
集合的に考えると話がすっきりします。
まず、FROMに書かれている全てのテーブルの直積(組み合わせ)を考えます。
この例だと、T1とT2の全ての行の組み合わせです。
行数は、テーブルの行数を全て掛け合わせたものになります。
次にWHEREの条件で行を絞り込みます。
次にGROUP BYで書かれた項目でグルーピングを行います。
その結果行をHAVINGで絞り込みます。
最後にORDER BYで並べ変えます。
COUNT(T2.no)はCOUNT(*)でもかまいません。
ほとんど同じ意味です。
本人はあまり意識しないで書いてます。
この例では、noは主キーですので、NULLは入っていないでしょうから、同じ値になりますね。
COUNT(no) は、noがNULLの行を数えないのに対し、COUNT(*)は、全てを数えると言う違いがあります。
直感的に分かったのが、”集合的”という言葉です。
「テーブルの行数を全て掛け合わせたものになる。」
なるほど、これでおぼろげながらSQLのデータ構造が分かった気がします。
WHEREの条件、GROUP BY、HAVING、ORDER BYの順番も参考になりました。
まだ、SQL文も手探りで、とりあえず作成。
ダメなら、位置を変えてみたり別の記述を試してみたり、結果を眺めてあってそうなら理由を考える。
okそうなら、PHPに書くという手順です。
本当にありがとうございました。^w^
No.4
- 回答日時:
T1のnoを115にしてますので、T1からは、noが115の行だけが、抽出されます。
T2は、T1のnoよりnoが小さいか等しい行だけが、抽出されます。
したがって、GROUP BYを行う前は、T1のnoが115の行と、T2のnoが115以下の行が存在します。
T1.no T1.name T1.title T1.jikan (T2.no) T2.jikann
115 foo var 110 1 10
115 foo var 110 40 50
115 foo var 110 115 60
T2.name と T2.title は関係ないので省略しています。
これを、T1.no でグループ化すると、答えが出ます。
T1.no は、グループ化項目なので関係なし、T1.name、T1.title、T1.jikanは、全行で同じなので問題無しです。
T2.noは表示しないので、これも問題ありません。
これで、分かりました?
まだ説明はできませんが、感覚的に分かったような気がします。
PerlやPHPとは、SQLは一線を画しているンすね。
当たり前か。^^;
毎回、フィーリングでプログラムを作っているンすけど、(たぶんこの方が処理が早い、メモリー的にも少ない、、、はず)、こういう細かな設定やシステムには、気になってしまって。
大変参考になりました。
ボクのSQLの礎の一つとなると思います。
No.2
- 回答日時:
こんなSELECT文で書けます。
SELECT T1.no, T1.name, T1.title, T1.jikan, COUNT(T2.no) as bangou
FROM table_namae as T1,
table_namae as T2
WHERE T1.no = 115
AND T1.jikan >= T2.jikann
GROUP BY T1.no;
やっぱり、すごい人もいるものです!!
できました。
このスクリプトでは一行だけでなく、T1.no = 115 AND をはずせば、すべての上からの番号が表示できます。
この文は、あと半年くらいはボクには書けそうもありません。
GROUP BYか、Havingかいろいろ試してはみたのですが、うまくいきませんでした。
テーブル名に仮の名前を付けて比較する事もできるんですね。
大変参考になりました。
No.1
- 回答日時:
PHPと絡めますが、
$sql = "select * from table_namae where no <= 115 ";
$rst = mysql_query($sql);
$rows = mysql_num_rows($rst);
とすれば数が出てきますね。
この回答への補足
mysql_num_rowsで出るのは、配列の総数。
私が知りたいのは、
no□name□title□jikan
1□一太郎□最初に□110
2□次郎□次ぎに□160
3□佐武郎□三番□95
で、時間でソートしたもののnoの上からの何番目という事です。
ソートすると、こうなります。
3□佐武郎□三番□95
1□一太郎□最初に□110
2□次郎□次ぎに□160
ソートしたものをnoの1で検索すると、2番目となります。
ソートしたものをnoの2で検索すると、3番目となります。
このnoが変わった時の、上から何番目がしりたいのですが。
mysql_num_rowsだと、3が出ます。
3つくらいなら、すべてを読み出してループしちゃえばいいんだけど、MySQLで分かれば、その方が早いかと。
ないですかね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
【お題】 ・このサンタクロースは偽物だと気付いた理由とは?
-
ソートした際の、特定のデータの番目を出したい
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
検索結果を指定件数ずつ抽出表...
-
レコードの登録順がおかしい
-
ファイルの漢数字の順番につい...
-
並べ替えについて
-
EXCELで4項目以上で並べ替えを...
-
上から何番目か。
-
エクセル、並び替え正しくソー...
-
コンボボックスのソートについて
-
<SQL>重複しているデータの場合...
-
テーブルのフィールドの一番長...
-
2回実行のSQL文を1回にしたい
-
BLOBやCLOBのパフォーマンスを...
-
「数字で始まらない」ものを抽...
-
select文の実行結果に空白行を...
-
oracle 2つの列の比較
-
SQL文 複数実行
-
【SQLサーバ】float型における...
-
単一グループのグループ関数で...
-
BLOB型項目をSQLの検索条件に指...
-
OUTER JOIN とgroup by
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルの漢数字の順番につい...
-
並べ替えについて
-
エクセル、並び替え正しくソー...
-
レコードの登録順がおかしい
-
月末日のみソートしたい
-
accessでDISTINCT 句と矛盾
-
テーブルレーコードをソートし...
-
エクセルの縦列のソートできま...
-
Selectした時のレコードの取得順
-
SQLで曜日のソートを月火水木金...
-
OracleとAccessの出力順の違い
-
アクセスに関して。クエリの並...
-
1の行を固定した上でVBAを用い...
-
ハイフンの入ったデータの並べ替え
-
文字型の順番がうまく並ばない。
-
都道府県順、北からソートした...
-
上から何番目か。
-
SQLのORDERBY句について質問です。
-
コンボボックスのソートについて
-
Excelのオートフィルタでソート...
おすすめ情報