我想在许多表上执行两个查询。第一个查询连接多个表并使用几个条件。它是这样的:
SELECT items.id, tableX.colA, tableY.colB ...
FROM items
LEFT JOIN table2 ON ...
LEFT JOIN table3 ON ...
...
WHERE {some conditions are true}
第二个查询是一个简单的查询,但取决于第一个查询的结果。我想通过他们的id选择与上一个查询相关的所有行。所以它应该是这样的
SELECT meta_name, meta_value FROM items_meta WHERE item IN ({LIST OF IDS FROM PREVIOUS QUERY})
这两个查询将用于不同的目的,因此不能合并为一个。
我一直在考虑将第一个查询的结果存储在临时表中,然后将第二个查询加入到它中。但我似乎无法找到一种方法来返回第一个查询的行并将ID放入临时表中。
非常感谢所有的贡献。 感谢
答案 0 :(得分:2)
以下是两个选项:
IN
列表。或者,只需使用以下方法组合查询:
SELECT meta_name, meta_value
FROM items_meta
WHERE item IN (SELECT items.id
FROM table1
LEFT JOIN table2 ON ...
LEFT JOIN table3 ON ...
...
WHERE {some conditions are true}
);
答案 1 :(得分:1)
我建议不要通过SQL进行第二次查询,而是通过PHP进行。执行完第一个查询后,您可以将所选信息保存到数组中:
//MySQL (PDO):
$sql = "...";//your first SQL code
$sqlPrepared = $conn->prepare($sql);
$sqlPrepared->execute();
$rows = $sqlPrepared->fetchAll(PDO::FETCH_ASSOC);
此时,您将拥有一个数组,其中包含您执行第二次算法/查询/过滤/所需的信息。如果要将它放在另一个表中,则必须创建一个包含所有新列的新表,这有点繁琐。相反,你可以:
$new_rows = array();
foreach ($rows as $row)
{
/*here you check if the row has the values you seek in the 'item' column
WHERE item IN ({LIST OF IDS FROM PREVIOUS QUERY})*/
if (($row['item']== '4')||($row['item']== '10')||...)
{
array_push($new_rows, $row);
}
}
现在您有了$ new_rows数组,您可以使用它来检查所选信息,例如:
print_r($new_rows);
请告诉我这是否是您要找的!
答案 2 :(得分:0)
您必须设计我在查询中使用的ID's
。您可以在此处使用PHP的join
功能。
<强>查询强>
SELECT meta_name, meta_value FROM items_meta WHERE item IN ('4', '8', '11')