2012-02-28 4 views
1

残念ながら私はまだ何かを見つけていない、誰かが私を助けたり、私にヒントを与えるかもしれない?MySQL CONCAT:文字列の最後にデータを追加し、サイズが超過した場合、最初にデータを削除する方法は?

私は、「users」という表と、最後の30回のログインのログイン日を保存するフィールド「last_login」を持っています。だから、それぞれの時間は、ユーザーがログインに成功すると、タイムスタンプは、文字列の末尾に追加する必要があり、それはこのようにSTHになります:

logdindate1; logindate2; logindate3; ...

.. logindatesは特定のサイズのタイムスタンプです。しかし、logindate31に達すると、logindate1を削除し、最後にlogindate31を追加する必要があります。

これは、MySQLクエリで非常に簡単に行う方法はありますか、またはPHPで長さをチェックする必要がありますか?はいの場合は、SELECTが必要ですか?次に長さを確認し、カットして別のUPDATEを実行しますか?それとも、それを行うための良い方法がありますか?

私が今まで持っているクエリは、(それは長さをチェックしたり、何かをカットしていません)です:

<?php $query = "UPDATE user SET login_date = CONCAT(login_date,'".$logindate.";') WHERE id='".$user_id."';"; ?> 

事前にありがとうございました!

+0

login-timesテーブルを作成し、ユーザーがログインするたびにレコードを追加することをお勧めします。このように1つの列を更新すると、より多くの問題が発生します。ログイン時間と使用制限を照会し、必要に応じて不要な古いレコードを削除してください – ManseUK

+0

イギリスのManseにもありがとうございます。私はあなたのアイデアを得て、あなたはログイン日を持つ新しいテーブルを作成するのに非常に適しています...いつものように、ボックスの外を考えずにこの1つのソリューションを実現しようとしていたのはどうでしたか...ありがとう私を正しい道に導く! – Chris

答えて

0

テーブルlogin_historyを作成し、そこに新しいログイン日付を挿入します。 JOINを使用して、ユーザーのログイン日を取得します。

は、私は強くあなたが

+0

OK、ありがとうございます。ZombieHunter!私は間違いなく私が知っている必要があります...ありがとう! – Chris

+0

@Chris:素早く汚れたソリューションを得るだけでなく、適切なDBデザインを学ぶことに少し時間を費やしたいと幸いです:-) – CodeZombie

0

$query = "UPDATE user SET login_date = RIGHT(CONCAT(login_date,'".$logindate.";', 256)) WHERE id='".$user_id."';";

256が30 login_datesあなた+セミコロンの長さがあると仮定して「データベースの正規化」と呼ばれるものの基本的な理解を得るお勧めします。 RIGHT

+0

申し訳ありませんが、これは間違った方向にOPをリードしています... – CodeZombie

+1

thxそれのためのソリューションを提供するためのDarhazer! :)しかし、私はManseUKとZombieHunterからの提案を検討し、新しいテーブルを作成すると思います... – Chris

関連する問題