[英]How to join two tables in PHP - MySQL that match an ID in the second table and still display specific record in table 1?
[英]How to join two mysql table using a specific value?
我有两个表,一个是用户,另一个是tran
表用户
id | userName | email |Privacy
------------+---------------+---------------+---------------
0 | user1 | email@a.com |0
25 | user2 | email1@a.com |0
150 | user3 | emai2@a.com |1
表转换
Date |sender| amount | receiver |
---------+------+--------------+----------+
1/1/2013 |user1 | 0 | user2 |
1/2/2013 |user1 | 25 | user3 |
1/2/2013 |user3 | 150 | user1 |
如何为用户1连接两个表,以便我可以得到下表(如果隐私为1,我将根据隐私设置设置接收方地址,然后我将显示电子邮件,否则我将显示用户名和类型将根据发送方进行设置和接收方地址,如果user1是发送方,则类型为transfer,否则接收到类型。我不想在查询中使用这两个条件,因为我可以在查询后通过简单地使用php(如果else条件检查该行的值)来设置此条件)
Date | amount | type |address
---------+--------------+-----------------+---------------
1/1/2013 | 0 | transfer |user2
1/2/2013 | 25 | transfer |emai2@a.com
1/2/2013 | 150 | received |user1
我想解释一下为什么我需要加入操作。我可以通过这种方式获取用户1的交易信息
select * from transaction where sender='user1' or receiver='user1'
提取信息后,我将能够在基于user1的表中准备我的交易类型,如果发件人还是不使用php,否则问题是我想根据用户表的隐私设置屏蔽用户名,因此我需要检查相应用户的隐私是否为一个。因此,我想加入表用户并以这种方式转换,以便在获取数据后我可以仅检查用户的隐私。
实际上我正在使用angularjs并运行如下查询:
$query="SELECT t.`tran_id`,t.`tran_type`,t.`sender`,t.`fee`,t.`date`, t.amount, COALESCE(u.email, t.receiver) AS receiver
FROM `transaction` t
LEFT JOIN `user` u
ON u.username = t.receiver
AND u.verify_email = 0;
";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
$arr = array();
if($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$arr[] = $row;
}
}
# JSON-encode the response
$json_response = json_encode($arr);
// # Return the response
echo $json_response;
?>
和输出是
<div class="row">
<div class="col-md-12" ng-show="filteredItems > 0">
<table class="table table-striped table-bordered">
<thead>
<th>Transaction_number <a ng-click="sort_by('tran_id');"><i class="glyphicon glyphicon-sort"></i></a></th>
<th>Type <a ng-click="sort_by('tran_type');"><i class="glyphicon glyphicon-sort"></i></a></th>
<th>Address <a ng-click="sort_by('sender');"><i class="glyphicon glyphicon-sort"></i></a></th>
<th>Amount <a ng-click="sort_by('amount');"><i class="glyphicon glyphicon-sort"></i></a></th>
<th>Feee <a ng-click="sort_by('fee');"><i class="glyphicon glyphicon-sort"></i></a></th>
<th>Date <a ng-click="sort_by('date');"><i class="glyphicon glyphicon-sort"></i></a></th>
<th>Status <a ng-click="sort_by('status');"><i class="glyphicon glyphicon-sort"></i></a></th>
</thead>
<tbody>
<tr ng-repeat="data in filtered = (list | filter:search | orderBy : predicate :reverse) | startFrom:(currentPage-1)*entryLimit | limitTo:entryLimit">
<td>{{data.tran_id}}</td>
<td>{{data.tran_type}}</td>
<td>{{data.sender}}</td>
<td>{{data.amount}}</td>
<td>{{data.fee}}</td>
<td>{{data.date}}</td>
<td>
{{data.verify_email == 1 ? "data.username" : "data.email"}}
</td>
</tr>
</tbody>
</table>
</div>
** verify_email存在于用户表中
您可以在联接条件中将LEFT JOIN与附加的Privacy设置一起使用,然后使用COALESCE
将接收者默认为匿名:
SELECT t.`Date`, t.amount, COALESCE(u.email, t.receiver) AS receiver
FROM `tran` t
LEFT JOIN `User` u
ON u.userName = t.receiver
AND u.Privacy = 0;
在“ Privacy
为1的情况下,右侧的表列将为NULL,因此将COALESCE
为默认值。
检查一下。 选择tran.date,tran.amount(如果user.privancy = 1,则为user.email,否则为tran.receiver端)作为用户的接收方,tran其中user.username = tran.receiver;
select t.date, t.amount, IF(u.privacy == 1,u.email,u.username)
from User u inner join tran t on u.userName = t.receiver
使用案例陈述..... SELECT t。 Date
,t.amount,当u.privacy = 1,则其他u.email端u.username作为接收器从壳体tran
吨LEFT JOIN User
U ON u.userName = t.receiver;
使用以下查询
SELECT t.`Date`, t.amount, COALESCE(u.email,t.receiver) AS receiver
FROM `train` t
LEFT JOIN `test` u
ON u.userName = t.receiver
AND u.Privacy = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.