3

ここ( https://dev.twitter.com/docs/api/1/get/statuses/home_timeline )からわかるように、1つのツイートには多くの情報(フィールド)が含まれているため、ツイートを保存するのは簡単ではありません。 MySQLの情報。

このJSONを配列にすると、1深度配列にはなりません。たとえば、このJSONのURLエンティティのように、1つの「エンティティ」フィールドに多数のURLが含まれている場合があります。

この情報を「urls[{"aa":a、 "bb":b}、{"aa":c、 "bb":d}]」のような文字列として1つのフィールドに保存する必要がありますか?または保存するための最良の方法はありますか?

{
    "coordinates": null,
    "favorited": false,
    "created_at": "Fri Jul 16 16:58:46 +0000 2010",
    "truncated": false,
    "entities": {
      "urls": [
        {
          "expanded_url": null,
          "url": "http://www.flickr.com/photos/cindyli/4799054041/",
          "indices": [
            75,
            123
          ]
        }
      ],
      "hashtags": [

      ],
      "user_mentions": [
        {
          "name": "Stephanie",
          "id": 15473839,
          "indices": [
            27,
            39
          ],
          "screen_name": "craftybeans"
        }
      ]
    },
    "text": "got a lovely surprise from @craftybeans. She sent me the best tshirt ever. http://www.flickr.com/photos/cindyli/4799054041/ ::giggles::",
    "annotations": null,
    "contributors": null,
    "id": 18700887835,
    "geo": null,
    "in_reply_to_user_id": null,
    "place": null,
    "in_reply_to_screen_name": null,
    "user": {
      "name": "cindy li",
      "profile_sidebar_border_color": "AD0066",
      "profile_background_tile": false,
      "profile_sidebar_fill_color": "AD0066",
      "created_at": "Wed Nov 29 06:08:08 +0000 2006",
      "profile_image_url": "http://a1.twimg.com/profile_images/553508996/43082001_N00_normal.jpg",
      "location": "San Francisco, CA",
      "profile_link_color": "FF8500",
      "follow_request_sent": false,
      "url": "http://www.cindyli.com",
      "favourites_count": 465,
      "contributors_enabled": false,
      "utc_offset": -28800,
      "id": 29733,
      "profile_use_background_image": true,
      "profile_text_color": "000000",
      "protected": false,
      "followers_count": 3395,
      "lang": "en",
      "notifications": true,
      "time_zone": "Pacific Time (US & Canada)",
      "verified": false,
      "profile_background_color": "cfe8f6",
      "geo_enabled": true,
      "description": "Just me, Cindy Li.Giving cute substance since 1997.\r\nMarried to @themattharris.\r\nProduct designer for Yahoo! ",
      "friends_count": 542,
      "statuses_count": 4847,
      "profile_background_image_url": "http://a3.twimg.com/profile_background_images/3368753/twitter_flowerbig.gif",
      "following": true,
      "screen_name": "cindyli"
    },
    "source": "web",
    "in_reply_to_status_id": null
},
4

2 に答える 2

2

列に格納します。次に、すべてを検索できるようにするだけでなく、すばやく見つけたいものにインデックスを配置できます。あなたが提案する形式で特定のものを検索するのは悪夢です。

そのビットを使い続けたい場合は、データベースの側面を処理するオブジェクトを作成するか、少なくともそれらをポップしたり取り出したりする関数を作成します。今はもっと手間がかかるように思えるかもしれませんが、長い目で見れば、後でもっと多くの労力を節約できます

編集: はい、データの各ビットを独自の列に保持します。そうは言っても、すべての情報を保存する必要はないかもしれません。たとえば、「ユーザーのメンション」に関する情報を保持したくない場合は、完全にスキップしてください。

2L を編集してこれを大局的に見てみましょう。たとえば、「Bob」を検索したいとします。次のような列構造がある場合:

+------+-----------+-----------+-----+
| user | favorited | truncated | url |
+------+-----------+-----------+-----+
| Bob  | true      | false     | ... |
| Sue  | true      | true      | ... |
| Tom  | true      | false     | ... |
+------+-----------+-----------+-----+

非常に単純なクエリを作成するだけです。

対このようなもの:

+--------------------------------------------------------------+
| tweetData                                                    |
+--------------------------------------------------------------+
| user:Bob;favorited:true;truncated:false;url:www.example.com  |
| user:Sue;favorited:true;truncated:true;url:www.example2.com  |
| user:Tom;favorited:true;truncated:false;url:www.example2.com |
+--------------------------------------------------------------+

ボブがお気に入りに登録された回数を見つけようとしていると想像してください。毎回行全体を抽出し、操作/正規表現/トリックを行ってフィールドを取得し、手動で集計する必要があります。

于 2012-08-15T07:02:48.977 に答える
1

厳しいが本当の答えは、データベース設計の基礎を読むことです。これを 1 つのテーブルに格納する必要があると考えているようです。これを複数のテーブルに分割し、それらを結合する必要があります。

于 2012-08-17T05:04:07.960 に答える