2つのテーブルとORDERBY日付(両方にある列)からSELECTしようとしています。1つのテーブル(tableA)には「A」という列があり、もう1つのテーブル(tableB)には「B」という列があります。array_key_exists()を使用して2つを区別します(「A」キーが存在する場合は、配列を実行します。 FunctionA()、「B」キーが存在する場合は、FunctionB()を介して配列を実行します。必要なのは、最新の(日付ごとの)20個のエントリだけです。これを実現するにはSQLクエリが必要です。
「同じように構造化されている場合は、単一のテーブルを使用する必要があります」という返信があることはすでに知っていますが、tableAはtableB(tableAの列がはるかに多い)とは大幅に異なるため、これは行いたくありません。また、単一のテーブルを使用してデータを格納すると、tableB用にフォーマットされたエントリの空の列が大量に発生します。tableBはtableAの列の大部分を必要としないため、非常に見栄えの悪いテーブルフォーマットになることは言うまでもありません。
両方のテーブルのデータを順序付けられた(日付順)方法で、1つの単一のストリームで表示したいだけです。
ちなみに、WHERE tableA.poster_id =$idとtableB.receiver_id=$idを選択する必要があります。
解決:
同じジレンマを持つ他の誰かがやってきた場合に備えて、これを更新しています。@Erik A. Brandstadmoenが丁寧にくれたSQLクエリを実装した後、これは基本的に私のコードが次のようになってしまったものです。
$MySQL->SQL("SELECT * FROM
(SELECT A.id AS id, A.date AS date, 'tableA' AS source
FROM tableA A WHERE A.poster_id = $id
UNION
SELECT B.id AS id, B.date AS date, 'tableB' AS source
FROM tableB B WHERE B.receiver_id = $id) AS T
ORDER BY T.date DESC LIMIT 0, 20");
$GetStream = array();
$i = 0;
while ($row = mysql_fetch_array($MySQL->Result))
{
$GetStream[$i]['id'] = $row['id'];
$GetStream[$i]['date']=$row['date'];
$GetStream[$i]['source'] = $row['source'];
$i++;
}
*** later on down the code ***
$i = 0;
while ($i<count($GetStream))
{
if ($GetStream[$i]['source'] == "tableA")
{
FunctionA($GetStream[$i]);
}
else
{
FunctionB($GetStream[$i]);
}
$i++;
}