Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql查询通过一个表列连接两个表顺序_Php_Mysql_Sql_Join - Fatal编程技术网

Php Mysql查询通过一个表列连接两个表顺序

Php Mysql查询通过一个表列连接两个表顺序,php,mysql,sql,join,Php,Mysql,Sql,Join,我有两张桌子(表1和表2)。我想通过与table2连接来显示table1中的所有行,这些行有多个具有相同table1 id(外键关系)的行,并将按table2优先级列(按描述排序)对结果进行排序 表1 表2 结果将是 提前谢谢 编辑 在您提到的问题中,您需要选择表1中的id在表2中多次可用的数据,该数据与您给出的结果集不匹配 考虑到最初的要求,下面应该可以做到这一点 select t2.table1_id as id_table1, t1.name, t2.priority, t2.eve

我有两张桌子(表1和表2)。我想通过与table2连接来显示table1中的所有行,这些行有多个具有相同table1 id(外键关系)的行,并将按table2优先级列(按描述排序)对结果进行排序

表1

表2

结果将是

提前谢谢

编辑


在您提到的问题中,您需要选择
表1
中的id在
表2
中多次可用的数据,该数据与您给出的结果集不匹配

考虑到最初的要求,下面应该可以做到这一点

select
t2.table1_id as id_table1,
t1.name,
t2.priority,
t2.event
from table1 t1
join
(
  select 
  p1.table1_id,
  p1.event,
  p2.priority
  from table2 p1
  join(
    select
    max(priority) as priority,
    table1_id
    from table2
    group by table1_id having count(*) > 1
  )p2
  on p2.table1_id = p1.table1_id and p2.priority = p1.priority

)t2
on t1.id = t2.t1id
order by t2.priority desc
这是一个


结果将得到与
max
优先级
列对应的相同
事件
,这将得到您想要的结果集。您提到,您只需要反映多次的items table1 ID,但结果查询显示tableid1“1”,即使它只存在一次:

SELECT DISTINCT t1.id,t1.name ,t2.event, t2.priority
FROM TABLE2 t2
right join 
TABLE1 t1
on t1.id=t2.table1_id
order by t2.priority desc
请尝试以下查询:

SELECT t1.*,t2.priority FROM table1 t1
INNER JOIN table2 t2
ON t1.id=t2.id
ORDER BY t2.priority DESC

主键和外键应具有相同的名称。语法应该是

SELECT Table1.id_table1,Table1.name,Table2.event,Table.priority FROM
Table1 LEFT JOIN Table2 ON
Table1.id=Table2.id
ORDER BY Table2.priority DESC
在表2中进行以下更改:

  • 删除或重命名第一列
  • 将第二列(外键)重命名为“id”

  • 是我还是图像没有输入?你就不能直接往下看吗?对不起。R您无法查看图像?是的,但可能是因为我们的防火墙。你不能改为输入模式吗?@TheProvost我已经更新了问题。正如你所见,需求显示了表2中没有的值。因此,使用内部连接并不是真正的答案。正如您所看到的,需求显示了表2中没有的值。因此,使用内部联接并不是真正的答案。很抱歉,您的查询与我的预期结果集不匹配。。它在结果集上显示重复的名称。请检查我的结果集。按优先级排序您的查询是可以的,但只显示6行。需要在查询中添加group by子句…是。您的查询是正确的,但我想显示表1的所有结果。如果外键在表2中不可用,则该行将显示为NULL,并且我也不想要((计数(*)大于1))。。谢谢..在这种情况下,您可以从table1 t1 left join(…)中执行
    ,并删除
    having
    子句。下面是一个示例,您需要选择
    t1.table1\u id作为id\u table1
    而不是
    t2.table1\u id作为id\u table1
    如果您想显示id和名称,有什么方法优化查询吗?如果我只需要表1的名称?是的,您可以在外部查询上选择任何您想要的内容,但请确保内部查询选择了正确的数据,因为它用于联接和分组。
    SELECT Table1.id_table1,Table1.name,Table2.event,Table.priority FROM
    Table1 LEFT JOIN Table2 ON
    Table1.id=Table2.id
    ORDER BY Table2.priority DESC