【发布时间】:2018-11-01 11:54:46
【问题描述】:
好的..所以我在这里发了一个帖子:
MySQL/PHP/PDO + How to get a row for each (duplicate) entry in IN() clasue?
显然……没有解决办法。 (或者我被告知)..
那么有没有使用 IN() 子句的替代解决方案?实际上,它确实为传入的每个项目返回一行...不管它是否重复条目?
我有关于使用(自我)JOIN.. 甚至可能是 EXISTS... 的建议,但我不清楚如何使用这些建议调整我当前的动态查询?
$qMarks = str_repeat('?,', count($brandlist) - 1) . '?'; //create '?' mark placeholders for query, remove last comma and replace with '?'
//preserve IN() order
$displayList_sql = "SELECT * FROM $tablename WHERE CONCAT(brandname, ' ', dosage) IN ($qMarks) ORDER BY FIELD(CONCAT(brandname, ' ', dosage),'". trim(implode("','", $brandlist))."')";
$displayList_stmt = $conn->prepare($displayList_sql);
$displayList_stmt->execute($brandlist);//make note of passing in array as param to execute() call
是否可以将其更改为使用 JOIN 或 EXISTS(任何东西),以便为每个项目返回一行? (这是一个动态发布的数组?)
【问题讨论】:
-
我不确定你的问题是否有意义; IN 没有做任何事情来“区分”结果。如果有多个行与 IN 列表的元素匹配,则将包括这些行。如果有不同的行,具有不同的值(都在 IN 列表中),那么这些不同的行也将被返回。 ...数据库设计有什么可憎之处使得使用变量作为表名是个好主意?
-
我认为 topicstarter 的意思是 sqlfiddle.com/#!9/75066f/7,然后他会期望两条记录包含
id 1 brandname a and dosage a,因为他两次使用相同的搜索 -
啊,我飞过“重复条目”中的重复
-
正确。表中只有 1 ROW .. 但 IN() 子句中有重复条目。我希望 IN() 子句中的每个项目都有一行。但我的理解是这是不可能的。那么这可以使用 JOIN 或 EXISTS 或其他东西来完成吗?占位符列表和品牌列表由用户从 $_POST[] 中选择动态生成
-
@Raymond Nijland 您的第二个查询按预期返回两行.. 但是我如何在我的查询中使用它?它传入一个动态创建的数组作为要为其返回数据的项目......但也可以用作“订单”(因为在这里保持订单非常重要)