[英]PHP SQL Query That Displays Certain Results Based On Values In Another Table
现在,我有两个数据库表。 表history_2014的一列(成员)说明成员是否处于活动状态(Y或N)。 我还有一个名为history_overall的表,其中包含这些成员的所有联系信息。 我需要一个仅显示活动成员的history_overall行的表。 现在,我有这个PHP:
<?php
$con=mysqli_connect("localhost","myusername","mypassword","mydatabase");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM history_overall");
echo "<table border='1'>
<tr>
<th>Address 1</th>
<th>Last Name</th>
</tr>";
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['address1'] . "</td>";
echo "<td>" . $row['last_name'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
当前代码将允许我显示所有行,但是我需要能够基于其他表显示某些行。
什么列将两个表联系在一起? 如果有关系,JOIN将完成此操作。
例:
SELECT history_overall.* FROM members
JOIN history_overall
ON history_overall.member_id = members.id
WHERE members.active = 'Y';
---- 编辑/注释 ----
由于我无法在注释中添加表结构布局,因此我将在此处进行注释。 当想要从数据库中检索特定记录以向我们提供表模式而不是实际的表名时,它更有价值。 以及您想要的结果数据示例。
你真的提供给我们所有的表history_2014
的列( member
= Y|N
),表history_overall
的列( address1, last_name
),这不允许我们建立两个(或更多)表之间的关系。
这是一个示例,假定两个表都有一个memberid列:
----------------------- -------------------------------------
| table1 | | table2 |
----------------------- -------------------------------------
| member | memberid | | address1 | full_name | memberid |
----------------------- -------------------------------------
| Y | 1 | | 123 street | jon doe | 1 |
----------------------- -------------------------------------
| N | 2 | | 789 court | jane doe | 2 |
----------------------- -------------------------------------
| Y | 3 | | 456 road | foo bar | 3 |
----------------------- -------------------------------------
问题:我如何从table2中的记录恢复,其中table1中的成员为'Y'?
这是我期望的记录结果:
-------------------------------------
| recordset |
-------------------------------------
| address1 | full_name | memberid |
-------------------------------------
| 123 street | jon doe | 1 |
-------------------------------------
| 456 road | foo bar | 3 |
-------------------------------------
回答查询:
SELECT table2.* FROM table1 JOIN table2 ON table1.memberid = table2.memberid WHERE table1.member = 'Y'
解释:
从表1的行中检索表2中的所有列,其中,表1中的memberid列与表2中的memberid列相同,该行的成员列包含Y作为没有排序或返回记录数量限制的值。
我猜您在两个表中都有某种用户ID,您可以进行查询以在ID匹配的两个表之间创建连接,并仅选择member ='Y'的行
只需使用此方法
select * from history_overall,members where members.status='active'
您将获得所有活动成员的结果,包括历史记录。
使用表联接(MySQL doc: http : //dev.mysql.com/doc/refman/5.7/en/join.html )。
简而言之,类似于:
SELECT ho.*
FROM history_overall AS ho
RIGHT JOIN history_2014 AS h ON ho.memberId = h.memberId
WHERE h.isActive = 'Y';
显然,您的字段名称可能有所不同...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.