我正在尝试回归与所选品牌($品牌)共享“交易ID”的前10个“品牌” . 我从一个基本查询开始,该查询使用列id和品牌查询1个表 .

我现在想要在2个单独的表(分别用于事务和产品)上使用公共字段(sku) .

我从这个查询开始,获得初始逻辑(信用到stackoverflow贡献者),它完美地工作 .

$brand = $_POST['brand'];

$query = $db->prepare("SELECT brand

FROM transactions

WHERE

id IN (SELECT id FROM transactions WHERE brand = :brand)

AND brand <> :brand

GROUP BY brand

ORDER BY COUNT(*) DESC

LIMIT 10");

$query->bindparam(":brand", $brand);

$query->execute();

如上所述,上述工作非常有用 . 我在下面略微修改它以包含相关表格 . 但是,它不起作用 . 并且不返回任何值 .

任何接受者 . 非常感谢 - 亚当

$brand = $_POST['brand'];

$query = $db->prepare("SELECT `2_products`.`brand`

FROM `2_products`

RIGHT JOIN `1_txns`

ON `2_products`.`sku`=`1_txns`.`sku`

WHERE

`1_txns`.`txn_id` IN (SELECT `1_txns`.`txn_id` FROM `1_txns` WHERE `2_products`.`brand` = :brand)

AND `2_products`.`brand` <> :brand

GROUP BY `2_products`.`brand`

ORDER BY COUNT(*) DESC

LIMIT 10");

$query->bindparam(":brand", $brand);

$query->execute();

我知道可能还有其他方法,例如创建临时表,只有 txn_id 和 brand 列,但我再次不确定如何执行此操作 .

编辑尝试#2 - 根据以下建议,我移动了AND 2_products . brand <>:品牌立即在ON条款之后 . 仍然返回0行 .

$brand = $_POST['brand'];

$query = $db->prepare("SELECT `2_products`.`brand`

FROM `2_products`

RIGHT JOIN `1_txns`

ON `2_products`.`sku`=`1_txns`.`sku`

AND `2_products`.`brand` <> :brand

WHERE `1_txns`.`txn_id` IN (SELECT `1_txns`.`txn_id` FROM `1_txns` WHERE `2_products`.`brand` = :brand)

GROUP BY `2_products`.`brand`

ORDER BY COUNT(*) DESC

LIMIT 10");

$query->bindparam(":brand", $brand);

$query->execute();

编辑3:还考虑到在我的内部选择查询中,where子句是一个未从内部查询中选择的列的事实 . 所以我试过这个:我得到一个错误'操作数应该只包含1列'

SELECT `2_products`.`brand`

FROM `2_products`

RIGHT JOIN `1_txns`

ON `2_products`.`sku`=`1_txns`.`sku`

AND `2_products`.`brand` <> :brand

WHERE `1_txns`.`txn_id` IN (SELECT `1_txns`.`txn_id`, `2_products`.`brand`

FROM `1_txns`

LEFT JOIN `2_products`

ON `1_txns`.`sku`=`2_products`.`sku`

WHERE `2_products`.`brand` = :brand)

GROUP BY `2_products`.`brand`

ORDER BY COUNT(*) DESC

LIMIT 10;

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐