php - 如何用php从MySQL表中获取多对多关系数据排序并显示?

标签 php mysql many-to-many sql-order-by

我对 php 和 mysql 很陌生。我正在努力学习,但陷入了这个问题。

我有一个多对多的关系。这些表是:用户和状态。 users 表中的许多公司在多个州运营,每个州都有许多不同的公司。用户表上的每个公司都有一个唯一的 ID,该 ID 存储在状态表中。然后,州表有一列表示公司运营所在的州名称。在州表中为公司所在的每个州创建一个新行。这一切似乎都正常。

我编写了以下 php 代码,从任何给定州 ($state) 的州表中提取所有公司 ID,然后显示在给定状态下运营的所有公司名称(使用公司 id 从用户表中提取)状态。

我的问题是,我想按字母顺序排列在任何给定州运营的公司列表。这段代码不会这样做。谁能提供一种更好的方法来实现此目的,从而允许对列表进行排序(或者通常会更有效、更好)?

$state=$_GET['state'];
echo $state;
$aid=array();
$result=mysql_query("SELECT * FROM state WHERE state='$state'");
while($row=mysql_fetch_assoc($result)){
$v=$row['company_id'];
array_push($aid,$v);};

foreach($aid as $val){
$result1=mysql_query("SELECT * FROM users WHERE company_id='$val'");
$row1=mysql_fetch_assoc($result1);
$company=$row1['company'];
echo $company.'<br/>';};

表结构为:

用户

company_id
company
(other columns that are not relevant)

状态

index
company_id
state
(no additional columns)

最佳答案

您通常会在关系数据库中引入第三个表来表达多对多关系。该表可以是 users_states 并且只有字段:user_id 和 state_id。所以你的表格可能应该是这样的:

您在 SQL 中进行排序。因此查询可能如下所示:

SELECT u.*, s.*
FROM users AS u
INNER JOIN users_states AS us ON u.user_id = us.user_id
INNER JOIN states AS s ON us.state_id = s.state_id
WHERE s.state_id = ?
ORDER BY u.name ASC

这里我假设字段 name 是您想要排序的依据,并且您将过滤为 state_id 传递的某些值。

关于php - 如何用php从MySQL表中获取多对多关系数据排序并显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12306829/

相关文章:

ios - RestKit多对多映射,怎么做?

c# - Kentico 中的多对多关系

php - 使用Node.JS调用PHP脚本会降低性能吗?

mysql - 如何通过用户函数在 Typo3 中实现多重连接?

c# - Entity Framework Code First 通过 DataAnnotations 实现多对多关系

mysql - 连接同一个表两次并按同一列排序

MySQL - 'seeing' 其他行

PHP 评论标签

php - 该插件没有有效的标题 - Wordpress 无法添加新插件

php - xDebug 没有在断点处停止