2013-08-23 39 views
1

所以我有兩個表(table_userstable_values插入到表,其中值有子查詢並返回多行

table_users有包括id(初級自動遞增),usernamelogitude列,latitude

table_values由列user_idotherUser_id組成。主鍵或唯一或自動增量都不是。

table_value的作用是將所有用戶的ID都存儲爲與登錄用戶相同的logitudelatitude。不過,我不想添加主要用戶本身,只有那些匹配他/她的位置值的人。另外我不想添加其他用戶,如果他們已經被添加了,不管他們的位置值。

下面我們以bob爲例。我想查詢table_users,並將所有匹配bob經度和緯度的用戶id插入到table_values中,但不能自己晃動。

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')) 

值鮑勃,12和3只是一個例子。這些將基於哪個用戶。這些值正在通過php post方法傳遞

回答

0

要使用insert . . . select而不是insert . . . values。下面插入所有對,相當於「鮑勃」:

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 value_2 = 3」的用途。

+0

我很抱歉,我讀了我的問題,它沒有意義,我實際上是問。我已編輯我的問題,所以希望現在有點更清楚 – BluePen

+0

耶,我得到了它的感謝。對代碼做了一些小的修改。非常感謝 – BluePen