Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的SQL强制WHERE in多次查找相同的id_Php_Mysql - Fatal编程技术网

php中的SQL强制WHERE in多次查找相同的id

php中的SQL强制WHERE in多次查找相同的id,php,mysql,Php,Mysql,我试图做一个购物车的产品有定制。。。为了避免数据库中的大量查询,我尝试在查询后将结果保存在数组中。查询如下所示: $sql = 'SELECT * FROM cc_restaurants_menu WHERE menu_id IN ("7","50","50") ORDER BY FIELD (menu_id,"7","50","50")'; $result = $conn->query

我试图做一个购物车的产品有定制。。。为了避免数据库中的大量查询,我尝试在查询后将结果保存在数组中。查询如下所示:

$sql = 'SELECT * 
            FROM cc_restaurants_menu 
            WHERE menu_id 
            IN ("7","50","50") 
            ORDER BY FIELD (menu_id,"7","50","50")';
$result = $conn->query($sql);

if($result->rowCount() > 0) {
    while($row = $result->fetch()) {
        $names[] = $row['menu_product'] .'<br>';
    }
}

提前感谢

我想您可能需要对每个菜单id进行一次查询,然后使用UNION ALL将结果连接在一起

大概是这样的:-

SELECT * 
FROM cc_restaurants_menu 
WHERE menu_id = "7"
UNION ALL
SELECT * 
FROM cc_restaurants_menu 
WHERE menu_id = "50"
UNION ALL
SELECT * 
FROM cc_restaurants_menu 
WHERE menu_id = "50"
ORDER BY FIELD (menu_id,"7","50","50")
$sql = "SELECT * FROM cc_restaurants_menu WHERE menu_id = '".implode("' UNION ALL SELECT * FROM cc_restaurants_menu WHERE menu_id = '", id_array)."' ORDER BY FIELD (menu_id,'".implode("','", id_array)."')";
$sql = "SELECT cc_restaurants_menu.* FROM cc_restaurants_menu INNER JOIN (SELECT ".implode(" AS a_menu_id UNION ALL SELECT ", id_array) AS a_menu_id ) sub0 ON cc_restaurants_menu.menu_id = sub0.a_menu_id ORDER BY FIELD (cc_restaurants_menu.menu_id,".implode(",", id_array).")";
或者在子查询中建立所需的菜单ID,然后将其加入到主表中

SELECT cc_restaurants_menu.* 
FROM cc_restaurants_menu 
INNER JOIN
(
    SELECT 7 AS a_menu_id UNION ALL SELECT 50 UNION ALL SELECT 50
) sub0
ON cc_restaurants_menu.menu_id = sub0.a_menu_id
ORDER BY FIELD (cc_restaurants_menu.menu_id,"7","50","50")
使用内爆生成第一个查询的操作如下:-

SELECT * 
FROM cc_restaurants_menu 
WHERE menu_id = "7"
UNION ALL
SELECT * 
FROM cc_restaurants_menu 
WHERE menu_id = "50"
UNION ALL
SELECT * 
FROM cc_restaurants_menu 
WHERE menu_id = "50"
ORDER BY FIELD (menu_id,"7","50","50")
$sql = "SELECT * FROM cc_restaurants_menu WHERE menu_id = '".implode("' UNION ALL SELECT * FROM cc_restaurants_menu WHERE menu_id = '", id_array)."' ORDER BY FIELD (menu_id,'".implode("','", id_array)."')";
$sql = "SELECT cc_restaurants_menu.* FROM cc_restaurants_menu INNER JOIN (SELECT ".implode(" AS a_menu_id UNION ALL SELECT ", id_array) AS a_menu_id ) sub0 ON cc_restaurants_menu.menu_id = sub0.a_menu_id ORDER BY FIELD (cc_restaurants_menu.menu_id,".implode(",", id_array).")";
使用内爆生成第二个查询的过程如下:-

SELECT * 
FROM cc_restaurants_menu 
WHERE menu_id = "7"
UNION ALL
SELECT * 
FROM cc_restaurants_menu 
WHERE menu_id = "50"
UNION ALL
SELECT * 
FROM cc_restaurants_menu 
WHERE menu_id = "50"
ORDER BY FIELD (menu_id,"7","50","50")
$sql = "SELECT * FROM cc_restaurants_menu WHERE menu_id = '".implode("' UNION ALL SELECT * FROM cc_restaurants_menu WHERE menu_id = '", id_array)."' ORDER BY FIELD (menu_id,'".implode("','", id_array)."')";
$sql = "SELECT cc_restaurants_menu.* FROM cc_restaurants_menu INNER JOIN (SELECT ".implode(" AS a_menu_id UNION ALL SELECT ", id_array) AS a_menu_id ) sub0 ON cc_restaurants_menu.menu_id = sub0.a_menu_id ORDER BY FIELD (cc_restaurants_menu.menu_id,".implode(",", id_array).")";

选择DISTINCT*
?不,只是尝试了一下,结果是一样的,给出2个结果而不是3如果直接从数据库调用查询,结果是什么?例如,如果我返回产品名称,我会得到“name1”(id 7)和“name2”(id 50)。。。只有2个结果,不是3个这与你的问题无关,但是为什么你要重复50这个值两次呢?这是多余的。我认为,如果你有随机id,这会导致问题,如果id的数量变得非常大,随机数量也是如此。在php中,使用内爆可以相对轻松地创建查询。好的,给我几分钟时间,我需要思考内爆看起来如何。老实说,内爆看起来并不优雅,但正在工作,因此目前它是正确的答案。。。谢谢我做了第一个查询,效果很好