希望在PDO中编写此查询时提供帮助

时间:2013-04-02 13:07:42

标签: php pdo

我是PHP新手,但我一直都在学习,但我也知道我有很多需要学习的东西,所以对我很轻松。

我目前正在编写一个分类广告脚本,虽然代码严格过时,但在我开始清理它之前情况要糟糕得多,现在我只是想让分类广告再次稳定,然后我打算继续返回并将事物更新为更现代的语言(PDO)但是现在我对于从哪里开始没有任何想法(并且不想在学习HTML,CSS,PHP和JS的同时无法阅读几个月)

下面的代码最初显示了从(tt_%s)获取数据的表格中的标题列,但我已经修改了将数据插入数据库的表格,所以现在不再有“标题”列在它的位置现在有一个表和一个表的制造商和另一个表的制造商,但这是我感到困惑的地方,我正在寻求帮助。

目前这正是我所看到的; (代码下面我会解释更多)

<?php
echo  "<div class='mostPopular'>";
echo  "Popular<br>Listings";

$node = new sqlNode();
$node->table = "types";
$node->select = "ID";
$node->orderby = "ORDER BY rand()";

    if(($typeRS = $mysql->select($node)) === false )
        die('Unable to Retrieve Ad Type');

    $sql = array();
    $typeID = 0;
        while( $adType = mysql_fetch_assoc($typeRS) ){
            $typeID = sprintf("`tt_%s`", abs(intval($adType['ID'])));       
            $sql[] = sprintf("SELECT %s.Year, %s.Hits, %s.CategoryID, %s.ID, CONCAT('','%s') AS TypeID FROM %s WHERE (`ExpireDate` > NOW()) ",
                                $typeID,
                                $typeID,
                                $typeID,
                                $typeID,
                                intval($adType['ID']),
                                $typeID);

        }

    $sqlStr = @implode("union ",$sql);
    $sqlStr .= " ORDER BY Hits DESC LIMIT 5";

    if(($adRS = $mysql->exSql($sqlStr)) === false)
        die('Unable to Retrieve Most Popular Ads');

    while( $ad = mysql_fetch_assoc($adRS) ){
        echo "<p>";
        echo "<a href='detail.php?fatherID=".$ad['CategoryID']."&amp;TypeID=".$ad['TypeID']."&amp;ListingID=".$ad['ID']."'>";
        echo $ad['Title'];
        echo "</a>";
        echo "</p>";
    }
    echo "</div>";
?>

首先,我不知道什么是CONCAT('','%s'),我也不知道$ sqlStr = @implode(“union”,$ sql);就是这样。

除了这些问题,考虑到这段代码已经过时,我应该切换到PDO,我希望有人可以告诉我如何使用PDO执行这些查询,因为我可以通过示例学习并应用相同的程序整个网站的其他查询。

如果有人不介意与我交谈,以至于我可以用PDO执行相同的结果,我会非常感激,并且在我急切等待你的回复时我提前感谢你们。

BTW,我在研究了过去几个月可以找到的每个PHP和MySql教程之后问这个问题

由于

1 个答案:

答案 0 :(得分:0)

虽然“请将此代码重写为PDO”过于本地化,但您遇到的实际问题需要不同的解决方案。

首先,您需要修复数据库架构。这很糟糕。

过早优化是所有邪恶的根源,使你从正确的方向堕落。如果要将它们联合起来,将数据分成小块是毫无意义的。

广告必须包含一个表格 它将使所有这些代码都过时,只留下一个常规查询,可以在一个传统的PDO调用中运行。

接下来,这段代码是由一些sprintf()疯子编写的,他们让它过于复杂。事实上,这里真的不需要一个sprintf()。

$sql = array();
while( $row = mysql_fetch_assoc($typeRS) ){
    $typeID = abs($row['ID']);
    $sql[]  = "SELECT Year, Hits, CategoryID, ID, '$typeID' AS TypeID 
                 FROM tt_$typeID WHERE ExpireDate > NOW()";
}
$sqlStr = implode("union ",$sql)." ORDER BY Hits DESC LIMIT 5"

就够了。

但同样,不需要这个联合查询。所有内容都必须通过单一普通查询执行,如此

SELECT Year, Hits, CategoryID, ID, TypeID FROM ads ORDER BY Hits DESC LIMIT 5

您无疑将能够使用您拥有的任何PDO示例运行