0

さまざまな数字 (「10 11 12」など) を MySQL フィールド (数字は PHP から取得) に挿入しようとしていますが、クエリを実行すると、フィールドは最初の数字しか取得しません。

たとえば、次のようにします。

UPDATE profile SET subcategory = '10 11 12' WHERE userId = 1 LIMIT 1

そしてDBは「10」を登録するだけです。

それを行う方法はありますか?

4

3 に答える 3

3

これは、数値 (おそらく整数) を更新しているために発生するため、mysql は最初の数値に対してのみジョブを実行します。

これを行う場合:

UPDATE profile SET subcategory = 10 WHERE userId = 1 LIMIT 1
UPDATE profile SET subcategory = 11 WHERE userId = 1 LIMIT 1
UPDATE profile SET subcategory = 12 WHERE userId = 1 LIMIT 1

カテゴリを 3 番目の値 (12) で更新するだけです。

別のテーブルを作成する必要があるため、複数のサブカテゴリに属する​​ユーザーをお勧めします。例: userId と subcategoryId の少なくとも 2 つのフィールドを持つ subcategories という名前のテーブル。そして、次のようなことができます:

DELETE FROM subcategories WHERE userId=1
INSERT INTO subcategories (userId, subcategory) VALUES (1,10)
INSERT INTO subcategories (userId, subcategory) VALUES (1,11)
INSERT INTO subcategories (userId, subcategory) VALUES (1,12)

最初の行 (削除) は、ユーザーのサブカテゴリを更新するためだけに使用されます。まず、ユーザーの古いサブカテゴリをすべて削除してから、新しいサブカテゴリを挿入します。PHP では、 foreach() を使用して複数の値の挿入を自動化できます。

ユーザー サブカテゴリごとのエントリを持つテーブル プロファイルに一意でない userId を含めることもできますが、これは複雑になります。

お役に立てば幸いです

于 2013-10-01T13:54:07.233 に答える
0

これは、解決しようとしている問題に大きく依存します。

少数の数値を格納しようとしているだけの場合は、php の結合関数と分割関数を使用して数値のリストを取得し、文字列との間で変換して VARCHAR に格納します。

この問題を解決するより良い方法は、データのレイアウトを理解することです。プロファイルをサブカテゴリにリンクするテーブルを用意してみてください。プロファイル ID 用とサブカテゴリ ID 用の 2 つの列。データベースの正規化を検索すると参考になるかもしれません。

このプレゼンテーションは比較的有益に見えます: http://www.sqa.org.uk/e-learning/MDBS01CD/page_26.htm

于 2013-10-01T13:32:56.890 に答える
0

あなたの問題から、サブカテゴリのタイプは整数であると思います。ひもを入れるとどうなる?変換されます。コンバーターは、10 が文字列と見なされた後の 10 スペースである最初の適切な整数に変換します。

あなたの問題を解決できるものは何ですか?

  1. 偶然のデータベース構造と関係に依存します。
  2. (悪い考え)たとえば、型を varchar に変更すると、挿入が行われます(DONT DO IT)
  3. 複数の更新を行います(実際にはデータベース構造に依存します)
于 2013-10-01T13:27:58.997 に答える