SQL/PHP-基于列值调用同一个表两次
以下是我的表格的一般设置:SQL/PHP-基于列值调用同一个表两次,php,sql,prepared-statement,Php,Sql,Prepared Statement,以下是我的表格的一般设置: users ------------- user_id | user_first | user_last | user_friendlist 1 | John | Doe | 2,3 2 | Jimmy | John | 1,3 3 | Papa | John | 1,2 首先,我将使用user\u id选择上面的表并检索user\u friendlist 然后,我
users
-------------
user_id | user_first | user_last | user_friendlist
1 | John | Doe | 2,3
2 | Jimmy | John | 1,3
3 | Papa | John | 1,2
$selectData = $con->prepare("SELECT
user_friendlist
FROM
users
WHERE
user_id=?");
$selectData->bind_param("i", $user_id);
$user_id = $_POST['user_id'];
$selectData -> execute();
$selectData-> bind_result($user_friendlist);
$arr = array();
while ( $selectData -> fetch() ) {
$arr[] = $user_friendlist;
}
echo json_encode($arr);
您应该有两个表用户和朋友
| user_id | freind_id |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 3 |
| 3 | 1 |
| 3 | 2 |
用户会喜欢
| user_id | user_first | user_last |
| 1 | John | Doe |
| 2 | Jimmy | John |
| 3 | Papa | John |
SELECT users2.user_first AS friend_first,users2.user_last AS friend_last
-- ,users1.user_first AS user_first,users1.user_last AS user_last
-- uncomment the last line to get the user info with his friends
FROM users as users1
join friends
ON users1.user_id=friends.user_id
JOIN users AS users2
ON users2.user_id=friends.friend_id
WHERE users1.user_id=1
和朋友
| user_id | freind_id |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 3 |
| 3 | 1 |
| 3 | 2 |
user\u id
是表users
user\u id
和friend\u id
是表friend
friends.user\u id
和friends.friends\u id
是用户的外键。user\u id
查询将类似于
| user_id | user_first | user_last |
| 1 | John | Doe |
| 2 | Jimmy | John |
| 3 | Papa | John |
SELECT users2.user_first AS friend_first,users2.user_last AS friend_last
-- ,users1.user_first AS user_first,users1.user_last AS user_last
-- uncomment the last line to get the user info with his friends
FROM users as users1
join friends
ON users1.user_id=friends.user_id
JOIN users AS users2
ON users2.user_id=friends.friend_id
WHERE users1.user_id=1
查询结果为
| friend_first | friend_last |
| Jimmy | John |
| Papa | John |
我强烈建议您将user_friendlist列去掉,并创建一个多对多表来将用户彼此关联起来。联接并不是真正设计为在包含多个键值的列上进行的。不是说你做不到,但这很难看/没有表现。多对多表将包含像friend\u request\u user\u id、friend\u repsonse\u user\u id这样的列(无论名称对您有何意义,并描述两个id字段之间的差异)您应该有另一个表名
user\u-friend
,例如有两列user\u-id
和friend\u-id
,user\u-id
将是列用户的外键。user\u-id
和您正在使用的mysqli
不是pdo
对吗?我希望保留所有用户一个屋檐下的信息。。我想最好将friendlist分离到另一个表中,并使用LEFT JOIN调用用户来检索名字和姓氏?很好,谢谢!我会用这个来代替我原来的split by,以及所有那些讨厌的东西。等等,这个查询有问题,我会尽快解决。我会设置DB:P谢谢你的双重检查第一次修复并测试它是选择用户名而不是他的friendshow来检索friends.user\u id以及user\u first和user\u last?我想我能弄明白,但不知道你是否知道,只要对脚本稍作修改:P