php - 简单关系型数据库——高效查询

标签 php mysql database relational-database

这本质上非常简单,我只是说得相当冗长。我的数据结构如帖子底部所示。我的目标是以简单的电子表格格式组织数据,“扁平化”关系数据库。像这样的东西:

Product1 URL
Product2 URL URL URL
Product3 URL

我最初的方法如下。我正在寻找替代方案的原因是我在产品表中有 > 10,000 行,并且每个产品平均有 5 个 URL。这会产生大量的 MySQL 查询(实际上超过了我共享的主机资源),一定有更好的方法,对吗?我的代码已被简化以提炼出我的问题的本质。

我的方法

//Query to get all products
$products = mysql_query("SELECT * FROM products");

$i = 0;
//Iterate through all products
while($product  = mysql_fetch_array($products)){

    $prods[$i]['name'] = $product['name'];
    $prods[$i]['id'] = $product['id'];

    //Query to get all URLs associated with this particular product
    $getUrls = mysql_query("SELECT * FROM urls WHERE product_id =".$product['id']);

    $n = 0;

    while($url = mysql_fetch_array($getUrls)){

        $prods[$i]['urls'][$n] = $url['url'];  
    }
}

结果

需要说明的是,这是预期的结果,是预期的输出。我只需要一种更有效的方法来从原始数据库表到这个多维数组。我怀疑有更有效的查询数据库的方法。另外,据我了解,当按比例放大到所需大小时,此数组会占用大量内存。由于我的目标是使用此数组将数据导出到 .csv,如果效率更高,我会考虑使用 XML(或其他东西)作为中介。因此,请随时提出完全不同的方法。

//The result from   print_r($prods);

Array
(
    [0] => Array
        (
            [name] => Swarovski Bracelet
            [id] => 1
            [urls] => Array
                (
                    [0] => http://foo-example-url.com/index.php?id=7327

                )
        )
    [1] => Array
        (
           [name] => The Stranger - Albert Camus
           [id] => 2
           [urls] => Array
               (
                   [0] => http://bar-example-url.com/index.php?id=9827
                   [1] => http://foo-foo-example-url.com/index.php?id=2317
                   [2] => http://baz-example-url.com/index.php?id=5644
                )
        )
)

我的数据库架构

产品

id  product_name

1   Swarovski Bracelet
2   The Stranger - Albert Camus
3   Finnegans Wake - James Joyce

网址

id  product_id  url                                                price

1   1           http://foo-example-url.com/index.php?id=7327       £16.95
2   2           http://bar-example-url.com/index.php?id=9827       £7.95
3   2           http://foo-foo-example-url.com/index.php?id=2317   £7.99
4   2           http://baz-example-url.com/index.php?id=5644       £6.00
5   3           http://bar-baz-example-url.com/index.php?id=9534   £11.50

URLs.product_id 链接到 products.id

如果您已阅读本文,感谢您的耐心等待!我期待着阅读您的回复。那么我该如何正确地做到这一点呢?

最佳答案

SQL

 SELECT p.id, p.product_name, u.url 
 FROM products p, urls u 
 WHERE p.id = u.product_id ORDER BY p.id

“扁平化”URL 的 PHP 代码,我刚刚用空格分隔了 URL。

$i = 0;
$curr_id;
while($product  = mysql_fetch_array($products))
{
    $prods[$i]['name'] = $product['product_name'];
    $prods[$i]['id'] = $product['id'];

    if($product['id'] == $curr_id)
    {
        $prods[$i]['urls'] .= " ".$url['url'];  
    }
    else
    {
        $prods[$i]['urls'] = $url['url']; 
    }
    $i++;
    $curr_id = $product['id'];
}

结果

[0] => Array
        (
            [name] => Swarovski Bracelet
            [id] => 1
            [urls] => http://foo-example-url.com/index.php?id=7327
        )
  [1] => Array
        (
           [name] => The Stranger - Albert Camus
           [id] => 2
           [urls] => http://bar-example-url.com/index.php?id=9827 http://foo-foo-example-url.com/index.php?id=2317 http://baz-example-url.com/index.php?id=5644

        )

关于php - 简单关系型数据库——高效查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7318389/

相关文章:

javascript - React 应用程序显示空白页面

mysql查询显示发送者和接收者的消息

mysql - 将参数传递给 MySQL 脚本

java - spark/java中的TINYINT(1)

sql - SQL 数据库的现成 Web 查询接口(interface)

php - MySQL 的问题。我应该怎么办?

php - 如何将字符串中的每个 URL 替换为另一个唯一的 URL?

php - 在自定义帖子类型中显示标签面板

database - 什么是排名系统的好设计

MySQL 创建高级查询