【问题标题】:Most efficient way to retrieve data from a set of matching id? [closed]从一组匹配的 id 中检索数据的最有效方法是什么? [关闭]
【发布时间】:2023-03-30 22:08:01
【问题描述】:

假设我有一个带有索引 id 的不同对象的表,其中包含有关每个对象的详细信息,并且我有另一个选定对象表,每个表都包含引用所选特定对象的 id 以及更多详细信息,例如对象包含为的日期选择。所以可以看成是这样的:

              objects                    choosen objects
    +-------------------------+    +-------------------------+
    | objID   | image| ...    |    | objID   | date | ...    |
    +-------------------------+    +-------------------------+
    | 1       | ...  | ...    |    | 2       | ...  | ...    |
    | 2       | ...  | ...    |    | 3       | ...  | ...    |
    | 3       | ...  | ...    |    | 5       | ...  | ...    |
    +-------------------------+    +-------------------------+

现在在我的 php 文件中,我使用以下查询访问所有选择的对象:

$con = mysqli_connect('localhost','root','root', 'objects')or die('not connecting');
$sql="SELECT * FROM choosen;";
$result = mysqli_query($con,$sql);
$id=array();
while($row=mysqli_fetch_assoc($result)){
    array_push($id,$row["objID"]);
}

这样,我想使用选定对象表中的对象 ID 来引用具有相同 ID 的对象,以便在屏幕上显示对象的图像作为对象表中包含的其他详细信息。因此,我得到以下代码:

$con = mysqli_connect('localhost','root','root', 'objects')or die('not connecting');
foreach($array_id as $i){
    $sql="SELECT * FROM objects WHERE objID=".$id.";";
    $result = mysqli_query($con,$sql);
    $row=mysqli_fetch_assoc($result);
    display($row);
}

尽管如此,我担心必须调用多个查询请求来循环选择对象并检索它们的详细信息作为它们的图像会导致无效和缓慢的数据检索。我想知道是否有一种最有效的方法可以从对象表中检索数据,这样可以节省更多时间和查询成本,或者另一方面,是否最好将图像和其他对象数据复制并传播到所选对象表中创建时,牺牲内存成本以换取时间和查询节省。我想听听您的任何决定和建议的优势。

【问题讨论】:

标签: php mysql database performance memory


【解决方案1】:

正如@Tim Biegeleisen 所说,您可以加入表格。为方便起见,请创建如下视图

CREATE VIEW v_objects AS
   SELECT o.* FROM objects o
   INNER JOIN choosen c ON o.objID = c.objID

PHP 内部

...
$result = mysqli_query($con, "SELECT * FROM v_objects");
$row = mysqli_fetch_assoc($result);
...

【讨论】:

  • 视图再简单不过了
【解决方案2】:

您应该使用以下查询连接这两个表:

SELECT *
FROM objects o
INNER JOIN choosen c
    ON o.objID = c.objID

这避免了许多不必要的往返 MySQL 数据库的往返。示例代码:

$con = mysqli_connect('localhost','root','root', 'objects')or die('not connecting');

$sql = "SELECT o.* FROM objects o INNER JOIN choosen c ON o.objID = c.objID";
$result = mysqli_query($con,$sql);
$row = mysqli_fetch_assoc($result);
// iterate and display result set here

请注意,如果您最初希望将 choosen 表上的查询限制为特定的 ID,您可以使用带有 mysqli 代码的准备好的语句。

【讨论】:

    猜你喜欢
    • 2014-02-03
    • 2018-07-16
    • 2017-01-06
    • 1970-01-01
    • 2011-07-23
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    相关资源
    最近更新 更多