0

私は PHP に本当に慣れていませんが、できる限りのことを学んできましたが、学ぶべきことがたくさんあることも認識しているので、気楽に行ってください。

私は現在、広告のスクリプトに取り組んでいます。コードはかなり古くなっていますが、クリーンアップを開始する前はもっとひどいものでした。今は、広告を再び安定させようとしています。その後、戻って更新する予定です。物事をより現代的な言語 (PDO) に変換しますが、今のところ、どこから始めればよいかについてのアイデアがありません (HTML、CSS、PHP、および JS を学習しているときに行ったように、どこにも行かずに何ヶ月も読みたいとは思いません)。

以下のコードは、もともと (tt_%s) からデータをフェッチしていたテーブルの Title 列を表示していましたが、データを DB に挿入するフォームを変更したため、「Title」列はなくなりました。現在、あるテーブルの年とモデル、別のテーブルの製造元がありますが、ここで混乱して助けを求めています。

現在、これが私が見ているものです。(コードの下で詳しく説明します)

<?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 で同じ結果を得ることができるようになるまで、誰かが私と会話することを厭わないのであれば、私は非常に感謝しています.

ところで、過去数か月に見つけたすべての PHP と MySql のチュートリアルを調べた後、これを尋ねます

ありがとう

4

1 に答える 1

0

「このコードを PDO に書き直してください」はローカライズされすぎていますが、実際の問題には別の解決策が必要です。

まず、データベース アーキテクチャを修正する必要があります。それはひどいです。

時期尚早の最適化は、すべての悪の根源であり、正しい道からあなたを堕落させました。とにかくそれらを結合する場合、データを小さなチャンクに分割しても意味がありません。

広告用のテーブルが1 つ必要です。
このコードはすべて時代遅れになり、1 回の従来の PDO 呼び出しで実行できる通常のクエリは 1 つだけになります。

次に、このコードは sprintf() マニアによって書かれたもので、どこからともなく複雑になりすぎています。実際のところ、ここでは sprintf() は 1 つも必要ありません。

$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の例を使って間違いなく実行できるでしょう

于 2013-04-02T13:38:46.063 に答える