我有这个代码来搜索MYSQL数据库中的匹配结果:
$where[] = 'p.id IN (
SELECT adcfvc.advert_id
FROM #__koparent_advert_specific_fields_values AS adcfvc
WHERE adcfvc.advert_id = p.id
AND adcfvc.field_name = ' . $db->Quote($sf_key) . '
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
)';
我想将上面的搜索查询从使用"IN"操作符更改为"INNER JOIN"。
知道我不能改变任何数据库结构,只要修改上面的代码。
我需要看到完整的查询,但在猜测它将是:
LEFT JOIN adcfvc ON adcfvc.advert_id = $table.id
其中$table为第一个表的表名
只需将子查询移动到内联视图中,将其别名并按键连接。
,似乎你可以消除where子句中的相关子查询。
SELECT ...
FROM ...
LEFT JOIN (
SELECT adcfvc.advert_id
FROM #__koparent_advert_specific_fields_values AS adcfvc
WHERE adcfvc.field_name = ' . $db->Quote($sf_key) . '
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' =
adcfvc.field_value) B
on B.advert_Id = p.id
您需要发布查询的其余部分,因为表格p没有显示。但你的问题奇怪之处在于,你为什么会有"内幕"。我认为你只需要做以下事情:
FROM #__koparent_advert_specific_fields_values AS adcfvc, whatever_table as p
WHERE adcfvc.advert_id = p.id
AND adcfvc.field_name = ' . $db->Quote($sf_key) . '
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
),