2016-12-09 8 views
0

PHP/MySQLの使用。名前のある行の行番号または位置番号を取得するにはどうすればよいですか?データベース には行番号がありません 例名前が格納されている行番号

________________ Row 
|__ name_|_ age _| 1 
| Joe | 30 | 2 
| Henry | 24 | 3 
| Rick | 55 | 4 
| Tom | 19 | 5 

は、だから、私は自分の名前を使用して、行の位置を取得することができ、それを通してコードをしたいです。 名前がTomの場合と同様に、tomが行5に位置することを示します。 ありがとう!

+0

順序テーブルの構成要素ではありません。時間をかけて実行すると、Tomは1回の実行で5回、別の回で3回、10回後に実行されます。ユーザー変数を使用して実行される各クエリの行番号をシステムに生成させることができます。前述のように、注文は保証されていないので、行#は時間とともに変化する可能性があります。 'SELECT A. *、@rn:= @ rn + 1をTableNameからの行にするクロス結合(Select @rn:= 0)B順に名前を付ける ' – xQbert

+0

@xQbertそれを行う方法は分かりますか? –

+0

行は順序付けられていないセットを表します。だから、「行番号」というものはありません。それで、5列目のトムはどの意味でですか? – Strawberry

答えて

-1

ユーザー変数を使用すると、row_number関数をシミュレートできます。

各ユーザーに割り当てられている番号は、クエリが実行されるたびに変わる可能性があることに注意してください。 nameの代わりにdateRegisteredで注文すると、新しいレコードを追加したり、新しいレコードを追加したり、1つを削除したり、dateRegisteredを過去の時間に変更したりする挿入、更新、削除が発生した場合、この番号を変更できます。あなたは永久的なIDが必要な場合は今

SELECT A.*, @rn := @rn+1 as Row 
FROM aTable A 
CROSS JOIN (Select @rn :=0) B 
ORDER BY Name 

Working SQL fiddle

... したい場合は、あなたの日付フィールドに順を変更するには、更新を変えるようにしてくださいIDの順に入れなければこのような方法で生成されたPK(代理キー)はレコードを一意に識別する以外の意味を持ちません。

create table atable (
    name varchar(10), 
    age int); 

    Insert into atable values 
    ('Joe',30), 
    ('Henry',24), 
    ('Rick',55), 
    ('Tom',19); 


ALTER table atable add column ID int; 

Update atable 
INNER JOIN (
    SELECT A.*, @rn := @rn+1 as Row 
    FROM aTable A 
    CROSS JOIN (Select @rn :=0) B 
    ORDER BY Name) B 
    on atable.Name = B.Name 
and atable.Age = B.Age 
set atable.id = B.Row; 

ALTER TABLE atable MODIFY ID int NOT NULL primary key AUTO_INCREMENT; 

Working fiddle

+0

... H I J ....いいえ。それは動作しません – Strawberry

+0

@Strawberry私は下の投票を受け入れる;行番号をシミュレートするには問題ありません。トムのための5は例であり、私はこの数字が各実行で変わる可能性があることを示しました(これが定数である必要があるかどうかは不明です)。また、この値が各実行の一貫性が必要な場合は、aynberのコメントに基づいて上に追加したリンクに、これを行う方法が示されています。 – xQbert

+0

OPはここで役に立つものを実際に学んでいないのですか? – Strawberry

関連する問題