1

所以我有两张桌子(table_userstable_values

table_users具有由id(主自动增量) 、、、、、组成usernamelogitudelatitude

table_values由列user_id和组成otherUser_id。主键、唯一键或自动增量都不是。

的目的是存储与登录用户table_value相同的所有用户的id 。但是我不想添加主用户本身,只添加与他/她的位置值匹配的用户。另外,如果其他用户已经被添加,无论他们的位置值如何,我都不想添加它们。logitudelatitude

所以下面让我们以 bob 为例。我想查询 table_users 并将所有与 bob 的经度和纬度匹配的用户 id 插入 table_values 而不是 bob 自己。

Table_users 
id    username longitude latitude
1      bob      1          2
2      sam      1          2
3      fred     3          4
4      alex     1          2

Table_values
user_id     otherUserId
1              2
1              4
2              1
2              4
4              1
4              2

因此,目前我可以在不添加主用户的情况下添加具有相同位置的用户,但我无法将多行添加到table_values. 此外,当我运行当前的 mysql 查询时,我添加了我不想要的重复项。

到目前为止,这是我的查询

INSERT INTO `table_values` (`user_id`, `otherUser_id`) VALUES ((Select `id` FROM `users` WHERE `username` = 'bob'), (Select `id` FROM `users` where `longitude` = 'bobs logitude AND `latitude` = bobs latitude AND `username` != 'bob'))

值 bob、12 和 3 只是示例。这些将取决于它是哪个用户。这些值正在通过 php post 方法传递

4

1 回答 1

0

你想用insert . . . select,没有insert . . . values。以下插入与“bob”等效的所有对:

INSERT INTO `table_values` (`user_id`, `otherUser_id`)
     Select `id`
     FROM `users` u1 join
          `users` u2
          on u1.value_1 = u2.value_2
     WHERE u1.`username` = 'bob' and u2.username <> 'bob';

以下将它们插入它们不存在的位置:

INSERT INTO `table_values` (`user_id`, `otherUser_id`)
     Select u1.`id`, u2.id
     FROM `users` u1 join
          `users` u2
          on u1.value_1 = u2.value_2
     WHERE u1.`username` = 'bob' and u2.username <> 'bob' and
           not exists (select 1 from table_values where u1.id = user_id and u2.id = otherUser_id);

我不确定您是否想以不同的顺序检查它们。

鉴于您的问题的性质,我不确定“ value_1= 12 AND = 3”的用途。value_2

于 2013-08-23T01:15:28.980 回答