1

テーブルのレイアウトは次のとおりです。

表 1: ID - U1 - U2 - ステータス

表 2 ID - U1 - U2 - タイプ - ステータス

U1 または U2 がテーブル 1 の U1 または U2 で見つかった番号と一致し、ステータスが確認済みに設定されている、テーブル 2 のすべてのレコードを選択する必要があります。

これは私が持っているものですが、効率的とはほど遠いものであり、レコードが作成された時期に基づいて並べ替えられず、各 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

あなたの声明に基づいて:

U1 または U2 がテーブル 1 の U1 または U2 で見つかった番号と一致し、ステータスが確認済みに設定されているテーブル 2 のすべてのレコードを選択する必要があります。

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 に答える