3

これが私が現在試していることですが、mySQLエラーを受け取ります:

mysql_query ("INSERT INTO profile_tag (profile_id, tag_id) 
(SELECT profile_id FROM profile WHERE username = '$username'), 
(SELECT tag_id FROM  tag WHERE  tag = '$music' OR tag = '$sports' OR tag = '$tech')"); 

私は1つのステートメントINSERTを使用して完了することができますが、2つではありません。SELECT

私が受け取るエラー:

クエリが無効です:SQL構文にエラーがあります。'(SELECT tag_id FROM tag WHERE tag = '' OR tag = 'sports' OR tag = '')'1行目付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

4

3 に答える 3

3

エラーが言うように、構文は正しくありません。挿入の値は、列定義の値の数と一致する必要があります。

INSERT INTO profile_tag (profile_id, tag_id)
SELECT
    profile_id, tag_id
FROM
    profile
    CROSS JOIN tag
WHERE
    username = ?
    AND tag IN (?, ?, ?)

各入力に値が見つかった場合、これにより複数の行が挿入されることに注意してください。ただし、それが必要なことだと思います。tag

于 2013-02-14T03:58:23.550 に答える
1

VALUES句を使用できます

insert into profile_tag(user_id, tag_id) values
((select id from users where username = 'alice'),
 (select id from tags where tag = 'music'));

http://sqlfiddle.com/#!2/76439/1/0

于 2013-02-14T03:58:30.413 に答える
0
mysql_query ("INSERT INTO profile_tag (profile_id, tag_id) 
(SELECT profile.profile_id, tag.tag_id FROM profile LEFT JOIN tag ON 1 WHERE profile.username = '$username' AND tag.tag IN ('$music', '$sports', '$tech'))"); 
于 2013-02-14T04:03:17.997 に答える