1

这是表格布局:

表 1:Id - U1 - U2 - 状态

表 2 Id - U1 - U2 - 类型 - 状态

我需要选择表 2 中的所有记录,其中 U1 或 U2 与表 1 中 U1 或 U2 中找到的数字相匹配,状态设置为已确认。

这就是我所拥有的,但它远非高效,并且不会根据创建时间对记录进行排序,而是将与每个 ID 关联的所有记录集中在一起。

 $q = "SELECT `U1`, `U2` FROM `Table1` WHERE `U1='{VALUE}' OR `U2`='{VALUE}' AND `Status`='Confirmed';

{Value} = 我们拥有的预存值。在执行该查询(同时循环)并确定表 1 中的哪个值等于我们的预定义值(使其成为 $ur )之后:

 $q2 = "SELECT * FROM `Table2` WHERE `U1`='".mysql_real_escape_string($ur)."' OR `U2`='".mysql_real_escape_string($ur)."'";
4

2 回答 2

1

在单个查询中(未经测试):

SELECT T2.* FROM (
    SELECT U2 AS VALUE FROM Table1 
    WHERE U1 = :value AND STATUS = "Confirmed"
    UNION
    SELECT U1 AS VALUE FROM Table1 
    WHERE U2 = :value AND STATUS = "Confirmed"
) AS T1, Table2 AS T2
WHERE T2.U1 = T1.VALUE  OR T2.U2 = T1.VALUE
ORDER BY T2.ID
于 2013-03-23T02:41:04.893 回答
0

根据你的说法:

我需要选择表 2 中的所有记录,其中 U1 或 U2 与表 1 中 U1 或 U2 中找到的数字相匹配,状态设置为已确认。

SELECT T2.*
FROM Table2 T2
   JOIN Table1 T1 ON 
      (T2.U1 = T1.U1 OR T2.U1 = T1.U2 OR T2.U2 = T1.U1 OR T2.U2 = T1.U2)
WHERE T2.Status = 'confirmed'
于 2013-03-23T02:02:35.667 回答