1

配列の内容が 10 のアイテムで、アイテム名が値 10 の 2 番目のアイテムであると仮定すると、シリアル化後に mysql 配列に格納されます。

OUT THESE STEPSを使用して、シリアル化されたmysqlクエリ内でその年齢を直接更新することは可能ですか(1つの方法はこれです)、データベースからデータをシリアル化して、シリアル化を解除し、配列を変更してから、再度シリアル化してから更新します

たとえば、このようなデータをシリアル化します

a:23:{i:10000011;a:5:{s:15:"social_users_id";s:8:"10000022";s:10:"friends_id";s:8:"10000011";s:8: "relation";s:1:"1";s:6:"status";s:1:"0";s:4:"html";s:41:"Pradeep Kumar がプロフィール写真を更新しました。"; }i:10000015;a:5:{s:15:"social_users_id";s:8:"10000022";s:10:"friends_id";s:8:"10000015";s:8:"関係"; s:1:"6";s:6:"status";s:1:"0";s:4:"html";s:41:"Pradeep Kumar のプロフィール写真が更新されました。";}i:10000016 ;a:5:{s:15:"social_users_id";s:8:"10000022";s:10:"friends_id";s:8:"10000016";s:8:"関係";s:1: "3";s:6:"ステータス";s:1:"0";s:4:"html";s:41:"Pradeep Kumar のプロフィール写真が更新されました。";}i:10000018;a:5:

または配列

[10000015] => Array
    (
        [social_users_id] => 10000022
        [friends_id] => 10000015
        [relation] => 6
        [status] => 0
        [html] => Pradeep Kumar has update profile picture.
    )

[10000016] => Array
    (
        [social_users_id] => 10000022
        [friends_id] => 10000016
        [relation] => 3
        [status] => 0
        [html] => Pradeep Kumar has update profile picture.
    )

配列 '10000015' の 'status' インデックスを選択して更新したいのですが、テーブルの coloum の longtext データ型を使用しています。

最初にそのステータス インデックスを検索し、その更新後にクエリを使用できますか、それとも PHP コードを使用する必要があります..

それより短くできますか?1 つのことだけを unpdate したい場合、そこには多くの無駄がありました (不必要なクエリ、更新)...特に配列が大きい場合

さらに、デシリアライゼーションなしで年齢検索を行うにはどうすればよいですか?(可能ですか?)

任意のアイデア...ありがとう

4

3 に答える 3

2

私の知る限り、これを行うことは不可能です。これは、MySQL で配列を使用することの欠点です (常にデータをシリアル化および非シリアル化する必要があります)。

次に、配列が同じように見えるので、それらをテーブルに入れます。

行 =>social_users_id|friends_id|relation|status|html

配列を使用したい場合は、NoSQL を見ることができます。私はmongodbを使用して多くの成功を収めています。NoSQL データベースの大きな欠点の 1 つは、SQL の考え方を取り除く必要があることです。たとえば、JOINS は使用できません。

しかし、MonoDB では配列がサポートされており、"クエリ可能" であり、これは動的データ セットにとって大きな利点です。


本当に必要な場合は、テーブルarrayを作成してarray_item

配列は次のとおりです。 id|name

そしてarray_item: id|array_id|key|value

これで、配列アイテムで、配列 ID x の値が欲しいと言うことができます

でも他にもいろいろ

キーyと値がxである必要がある配列が必要なように

このデータセットは時間の経過とともに巨大になり、読みにくいことに注意してください

于 2013-05-24T07:01:29.423 に答える
1

もちろん、厳密に言えば、データベースのどの行も更新できます。ポイントは、このように進めるのは本当に良い考えなのか?ということです。

シリアル化は規則と仕様に従うことを忘れないでください。unserialize()関数が 15 文字の文字列を処理するs:15:"social_users_id"ことを意味します。これは一例で、他にもルールがあります。

はい、厳密に言えば、シリアライズされた配列の文字列を更新することはできますが、仕様を計算する必要があります。また、シリアライザーを自分で書き直したいとは思わないため、遅かれ早かれ、シリアライゼーションを壊して混乱させることになります。データ。

いずれにせよ、仕様の詳細が必要な場合は、PHP マニュアルのこれらのコメントを確認してください。

もう 1 つのポイントは、明らかに、フィールドを更新する必要がある場合、このフィールドは部分文字列としてではなく、フィールドとして存在する必要があるということです。これは脆弱なデータベース設計であり、この点も遅かれ早かれ問題を引き起こします。

さて、両方の欠点を組み合わせると、まあ...あなたは推測します;o)

于 2013-05-24T07:19:49.880 に答える
0

簡単な答えはノーです。シリアライズされたデータは、シリアライズを解除してから編集し、再シリアライズする必要があります。ただし、preg_replace();処理がかなり集中するような正規表現関数を実行する場合は除きます。

私の賞賛は、値をデータベースに個別に保存することです。

于 2013-05-24T07:05:48.193 に答える