[英]PDO union select results nothing
我需要选择name
, surname
从users
那里username
=列following
内network_follow
表
查询:
"SELECT * FROM network_follow WHERE following = :f UNION SELECT name, surname FROM users where username = (following)";
php代码:
$f = $conexao_pdo->prepare('SELECT * FROM network_follow WHERE following = :f UNION SELECT name, surname FROM users where username = (following)');
$f->bindParam(':f', $db_user);
$f->execute();
while($values = $f->fetch(PDO::FETCH_ASSOC)){
$fvalue = $values['follower'];
$fname = $values['name'];
echo '<center>
<div><a href=""> <img class="rounded-circle" width="45" src="'.get_user_picture($fvalue).'"></img> @'.$fvalue.'</a>
<span style="padding-left: 15px;">'.$fname.'<span>
<div></center>';
}
对我来说$fvalue
就好了,但是$fname
不好
由于某些原因, 工会选择不起作用,有人可以帮忙吗?
UNION
用于从多个表中选择相似的数据。
JOIN
用于合并来自多个表的相关数据。
例子:
SELECT `city`, `sights` FROM `places_i_visited`
UNION
SELECT `city`, `sights` FROM `places_i_want_to_visit`
+----------------+--------+
| city | sights |
+================+========+
| Los Angeles | 1537 | -- from `places_i_visited`
| Rio de Janeiro | 829 | -- from `places_i_visited`
| Moscow | 1822 | -- from `places_i_want_to_visit`
+----------------+--------+
SELECT `city`, `sights`, `visits`.`date_visited`, `visits`.`duration`, `visits`.`sights_seen` FROM `places_i_visited`
INNER JOIN `visits` ON `visits`.`city_id` = `places_i_visited`.`city_id`
+----------------+--------+--------------+----------+-------------+
| city | sights | date_visited | duration | sights_seen |
+================+========+==============+==========+=============+
| Los Angeles | 1537 | 2017-06-25 | 14 | 25 |
| Rio de Janeiro | 829 | 2018-11-04 | 7 | 12 |
+----------------+--------+--------------+----------+-------------+
在您的情况下,您想从network_following
表中获取信息, 并将其与users
表中的用户名结合起来 。 JOIN
在这里更合适:
SELECT network_follow.*, users.name, users.surname FROM network_follow
INNER JOIN users ON users.username = network_follow.following
WHERE following = :f
我在这里使用INNER JOIN
来确保您只在两个表中看到具有结果的条目。
如果要查看数据库中的数据是否不一致,可以改用LEFT JOIN
。 这样,您将看到network_follow
表中的所有条目。 如果在users
表中没有这样的users
,您仍然会看到这些条目,但name
和surname
列将为NULL
。
您可以使用以下查询代替使用UNION
语句:
SELECT t1.*
,t2.name
,t2.surname
FROM network_follow AS t1
INNER JOIN users AS t2 ON t1.following = t2.username
WHERE t2.following = ':f'
尽管您需要考虑任何ID的列,但可以使用主键和外键对表进行规范化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.