3

だから、私はこのMySQLテーブルを持っています。関連する列は次のとおりです。

| raw line             | composed_line | next_line              
|----------------------|---------------|------------------------
|                      |               | When I have a bad day,
| I cry my eyes out.   |               | When I cry my eyes out,
| I get ice cream.     |               | When I get ice cream,    
| Things seem better.  |               | When things seem better,     
| I get out of bed.    |               | When I get out bed, 

これは、最後から 2 番目の行の「次の行」列からデータを選択し、最新の行の「raw_line」列のデータと結合します。

SELECT CONCAT((SELECT `next_line` FROM `lines` ORDER BY id DESC LIMIT 1 OFFSET 1), 
(SELECT `raw_line` FROM `lines` ORDER BY id DESC LIMIT 1))

結果は次のようになります

When things seem better, I get out of bed.

ただし、この結果を取得して、最新の行の「composed_line」という列に挿入する試みはすべて失敗しました。これを行うためにPHPとSQLを使用しようとしましたが、どれも機能しません。

「next_line」と「raw_line」を連結して ID asc でソートした whoooole テーブルを (PHP で) 表示する方法を見つけられれば、これを行う必要はありませんが、それを実行しようとすると、常に「next_line」を一緒に表示し、次に「raw_lines」を一緒に表示するか、その他の望ましくないくだらない結果 (doublesadface) を表示するという悲惨な失敗でした。

私が望む結果は次のようになります。

When I have a bad day, I cry my eyes out.
When I cry my eyes out, I get ice cream.
When I get ice cream, things seem better.
When things seem better, I get out of bed.

私はSQLが初めてです。どんな助けでも大歓迎です。

4

2 に答える 2

2

「id」列があると仮定すると、結合で使用する方がよいでしょう。

update line a
  join line b on a.id = b.id-1
  set a.composed_line = concat(a.next_line,' ',b.raw_line)
where b.raw_line is not null;

または、単に表示するには:

select
    concat(a.next_line,' ',b.raw_line)
from
   line a
   join line b on a.id = b.id-1

ここで SQLFiddle

于 2013-08-14T16:12:25.180 に答える
1
SELECT CONCAT(nextlines.next_line, rawlines.raw_line) AS line
FROM `lines` rawlines
JOIN `lines` nextlines
ON rawlines.id = (nextlines.id % (SELECT COUNT(*) FROM `lines`)) + 1
ORDER BY rawlines.id ASC

SQL Fiddle のデモを参照してください。

わずかに複雑なビットは、の最後の IDが の最初の ID に結合される%ように、レコード数を指定したモジュラス ( )だけです。rawlinesnextlines

于 2013-08-14T16:15:21.973 に答える