PHP& MySQL错误 - 重复的列名'user_id'

时间:2010-10-14 22:45:06

标签: php mysql

我从查询中得到以下错误,并想知道如何解决此问题?

Duplicate column name 'user_id'

这是我的MySQL查询。

"SELECT COUNT(users_friends.user_id) FROM ((SELECT *
FROM users_friends
INNER JOIN users ON users_friends.user_id = users.user_id
WHERE users_friends.user_id = '" . $user_id . "' 
AND users_friends.friendship_status = '1')
UNION
(SELECT *
FROM users_friends
INNER JOIN users ON users_friends.friend_id = users.user_id
WHERE users_friends.friend_id = '" . $user_id . "'
AND users_friends.friendship_status = '1')) as friends"

这是我的新查询。

SELECT COUNT(user_id) FROM ((SELECT users_friends.user_id
FROM users_friends
INNER JOIN users ON users_friends.user_id = users.user_id
WHERE users_friends.user_id = '" . $user_id . "' 
AND users_friends.friendship_status = '1')
UNION
(SELECT users_friends.user_id
FROM users_friends
INNER JOIN users ON users_friends.friend_id = users.user_id
WHERE users_friends.friend_id = '" . $user_id . "'
AND users_friends.friendship_status = '1')) as friends

2 个答案:

答案 0 :(得分:0)

您正在使用SELECT * from,来自2个表user_friends和users的所有列,它们都有一个名为user_id的列。当您使用UNION时,我的理解是创建了一个临时表,因此MySQL抱怨您有两个具有相同名称的列。尝试明确定义要用于实例SELECT users.user_id, user_friends.abc等的user_id

编辑: 如果我理解正确,你正试图获得朋友的用户ID。对我来说,你之前的查询似乎会在所有记录中返回$user_id

试试这个:

SELECT COUNT(*) as CNT FROM 
(

(SELECT users.user_id as uid
FROM users_friends
JOIN users ON users_friends.user_id = users.user_id
WHERE users_friends.friend_id = '" . $user_id . "' 
AND users_friends.friendship_status = '1')

UNION

(SELECT users.user_id as uid
FROM users_friends
JOIN users ON users_friends.friend_id = users.user_id
WHERE users_friends.user_id = '" . $user_id . "'
AND users_friends.friendship_status = '1')

) as myfriends

答案 1 :(得分:0)

这里有几个问题。你显然(阅读幽默)只想要一个行数,所以不需要SELECT *,是吗?我假设您想使用UNION将行添加到一起......因此:

SELECT COUNT(*) AS the_count
FROM 
(SELECT user_id AS ID
FROM users_friends
INNER JOIN users ON users_friends.user_id = users.user_id
WHERE users_friends.user_id = '" . $user_id . "' 
AND users_friends.friendship_status = '1'
UNION
SELECT friend_id AS ID
FROM users_friends
INNER JOIN users ON users_friends.friend_id = users.user_id
WHERE users_friends.friend_id = '" . $user_id . "'
AND users_friends.friendship_status = '1'
) AS uf1;

注意:我假设查询的其余部分(内部联接,其中等)有效。

已编辑,使用ya的不明确字段名称修复语法问题。

SELECT COUNT(*) AS the_count
FROM 
(SELECT uf.user_id AS ID
FROM users_friends uf
INNER JOIN users u ON uf.user_id = u.user_id
WHERE uf.user_id = '" . $user_id . "' 
AND uf.friendship_status = '1'
UNION
SELECT uf.friend_id AS ID
FROM users_friends uf
INNER JOIN users u ON uf.friend_id = u.user_id
WHERE uf.friend_id = '" . $user_id . "'
AND uf.friendship_status = '1'
) AS uf1;