0

ステップIDが存在しない場合にのみ、すべてのユーザーのテーブルステップからテーブル(usersteps)に行を挿入しようとしています。

INSERT INTO userssteps
(status,user_id,step_id)
SELECT  
'0' , 
(SELECT DISTINCT id from users),
(SELECT DISTINCT id from steps)

上記のMYSQLで次のエラーが発生します

#1242 - Subquery returns more than 1 row

理由:新しいユーザーがサインアップすると、すべてのステップを取得する必要があります。新しいステップを作成する場合は、現在のユーザーが表示できるようにユーザーステップで作成します。

これを行うためのより賢い方法があれば、私は知りたいのですが、私は困惑しています。私もcakePHPを使用しているので、これを支援する特別なcakePHPの方法がある場合は、それをお勧めします。

テーブル構造

steps:
id
name

users:
id
username
password

userssteps:
id
user_id
step_id
status
4

3 に答える 3

1

デカルト積を作成しようとしているようです。http://en.wikipedia.org/wiki/Cartesian_product

ユーザーとステップテーブルの間に関係がない場合、それらを結合することはできず、乗算するだけです。

INSERT INTO userssteps
(status,user_id,step_id) 
select 0,
users.id,
steps.id
from users
inner join steps
于 2013-03-14T15:03:54.153 に答える
0

この方法を試してください:

INSERT INTO userssteps
(status,user_id,step_id) 

select 0 as status,
users.id,steps.id
from users
inner join steps
on (users.id=steps.user_id);

そのように動作するはずです;)

PS:これで結合は正しいです。

Saludos。

于 2013-03-14T14:38:03.640 に答える
0

サブクエリ(ユーザーからのSELECT DISTINCT id)および(ステップからのSELECT DISTINCT id)は、すべてのIDを返します。挿入句では、必要な値は1つだけです(複数の値を持つことはできません)。IDによって2つのテーブルを内部結合することができます

于 2013-03-14T14:41:24.460 に答える