MySQL基于table2从table1中选择数据

时间:2016-10-10 17:16:37

标签: php mysql

我想Toggle数据SELECT FROM status table WHEREaccount_name or author$logname如果$username是来自account_name or author friends

的朋友

这是table

数据 account_name 作者

1 您好 John John

2 很好 John Doe

3 Doe James

4 谁是谁? 詹姆斯 史密斯

5 约翰 威廉姆斯

6 地狱 银行 詹姆斯

这是status table

user1 user2

John Doe

詹姆斯 Doe

史密斯 詹姆斯

威廉姆斯 约翰

银行 詹姆斯

我想要做的是friends table SELECT来自status table的所有数据,其中account_name and author是John或Doe或John的朋友,即威廉姆斯。

因此$username="Doe"$logname="John"时查询的输出应为1,2,3和5,但$username="Doe"$logname="Doe"应为1,2, 3,4,5和6。

以上是我到目前为止所尝试的内容,但我从status或仅result得到了account_name or author只有$logname或{{1}的所有结果}}

$username

到目前为止,我已经检查了,请任何帮助将不胜感激。

Two mysqli queries

Difference between left join and right join in SQL Server

How can an SQL query return data from multiple tables

Select results from table1 based on entries on table2

2 个答案:

答案 0 :(得分:0)

那个示例数据非常有用,我想出了这个:

$query=mysqli_query($db_conx, "
 SELECT
`status`.id,
`status`.account_name,
`status`.author,
`status`.`data`
 FROM
`status`
LEFT JOIN friends AS acc_friends ON `status`.account_name IN (acc_friends.friend1, acc_friends.friend2)
LEFT JOIN friends AS au_friends ON `status`.author IN (au_friends.friend1, au_friends.friend2)
WHERE
'$logname' IN (acc_friends.friend1, au_friends.friend1,acc_friends.friend2, au_friends.friend2)
OR '$username' IN (acc_friends.friend1, au_friends.friend1,acc_friends.friend2, au_friends.friend2)
 ");

我一开始很少理解你的需求,这次是从作者OR帐户中删除每个记录,然后搜索BanksDoe(将它们更改为logname和用户名)在朋友列表中,因为在帐户和作者中再次搜索只是多余的。

此查询应该可以解决问题:)

答案 1 :(得分:0)

在张贴在他朋友的朋友或朋友身上时,您似乎正在尝试SELECT朋友的朋友记录?类似于facebook feed。 我不知道是否有更好的方法可以做到这一点,但你可以尝试下面的代码,需要改进它或有人可以在这里改进它。

$query = mysqli_query($db_conx, "SELECT * FROM friends WHERE user1='kira' OR user2 = 'mandekira' OR user2='kira' OR user1 = 'mandekira'");
$num_row = mysqli_num_rows($query);
?>
<table>
<?php
while($row=mysqli_fetch_array($query))
{
    $sql = mysqli_query($db_conx, "SELECT * FROM status WHERE (account_name='".$row['user1']."' AND author='".$row['user2']."') OR (account_name='".$row['user2']."' AND author='".$row['user2']."') ORDER BY postdate DESC");
    while($row=mysqli_fetch_array($sql))
{
?>
    <tr>
    <td width="100"><?php echo $row['data']; ?></td>
    <td width="100"><?php echo $row['account_name']; ?></td>
    <td width="100"><?php echo $row['author']; ?></td>
    </tr>
<?php   
}
    }
?>
</table>
<?php