3

这是我的查询:

SELECT DISTINCT ap.apptype_id
FROM tblSubmission AS s
JOIN tblApp AS ap ON ap.app_id = s.app_id
WHERE s.app_id =406
OR s.app_id =180
OR s.app_id =179

它只返回与数据库中的行有关的唯一 apptype_id。它现在就像它应该的那样工作,除了它返回一个多维数组而不是一维数组这一事实。我可以继续编写一个 PHP 函数来解决这个问题,但我宁愿让查询正确返回数组,而不是让服务器做额外的工作来解决查询问题。谁能帮我吗?

此外,如果有人看到我可以优化此查询以使其更快的方法,那也很棒!

function db_query($querystring) { 
   $rec_set = array(); 
   $result = mysql_query($querystring); 
   if (!$result) { 
       // do nothing, query might have failed but it might have just returned no results          
       #echo ("Invalid Query Result:<br /><b>" . $querystring . "</b><br />"); // debug 
    }elseif($result === true){ 
       // do nothing, query didn't return anything but succeeded 
    }else{ 
       while ($row = mysql_fetch_assoc($result)) { $rec_set[] = $row; }            
       mysql_free_result($result); 
    } 
    return $rec_set; 
  }
4

3 回答 3

1

您要返回两条记录,因此它是多维的。

您有DISTINCT ap.apptype_id并且您的查询找到了两条具有不同 ID 的记录。

编辑:只是为了澄清;在您要查找的一维数组中,我相信您想要的结果是:

array([7], [2]) // i.e your two distinct ids.

试着记住,使用 mysql 你也会返回列标题,所以这种布局没有意义。

编辑2:

也许这样的事情会有所帮助?

$a = array(
    0 => array('first'=>7),
    1 => array('second'=>2)
);

$row = array_map('implode', $a);

输出:

array(2) { [0]=> string(1) "7" [1]=> string(1) "2" }

array_map 是您想要的功能。它应该可以根据需要工作。

于 2012-10-16T16:11:17.847 回答
0
SELECT DISTINCT ap.apptype_id
FROM tblSubmission AS s
JOIN tblApp AS ap ON ap.app_id = s.app_id

上面的部分将选择所有不同apptype_idapp_id两者都在tblSubmission和中tblApp。如果 ID 是,那么你正在服用406 OR 180 OR 179。因此它将返回所有与这三个s 匹配并且在两个表中的apptype_id对应s。IDID

认为,

tblApp(id, type)有三个条目<406, 10>和。 有三个条目和。加入后会有两个条目 , 想想如果你选择不同的类型会发生什么?它将返回两个条目 和<180, 11><100, 12>tblSubmission(id, ...)<406, ...><180, ...><179, ...>table(id, type, ...)<406, 10, ...><180, 11, ...><10><11>

于 2012-10-16T16:05:28.790 回答
0

它正在返回多维数组,因为您要求它使用 mysql_fetch_assoc($result)

如果你将你的代码移动到类似 PDO 的地方,你可以使用 fetch 列来获取你想要的东西。 http://www.php.net/manual/en/pdostatement.fetchcolumn.php

关于您的原始问题,查询很好,您从 PHP 获取它的方式是导致问题的原因。至于让它更快,你可能会考虑使用IN而不是多个ORs,但我不确定这是否会对 mysql 产生任何影响(你可以在查询中使用 EXPLAIN 来显示数据库使用什么来获取结果)

于 2012-10-16T17:49:10.707 回答