1

私は独学のコーダーなので、クラスで取り上げなかった非常に単純な答えを見落としているかもしれませんが...

私はさまざまなビジネスでいっぱいのDBを持っており、Unique IDそれらは私のサーバー上の彼らの写真の名前に対応しています。私のウェブサイトのページが読み込まれるたびに、phpが最も少ないビューでビジネス(および後続の広告)を取得するようにします。適切な場合は、広告のサイズも2つあります。説明しようと思います。

テーブル:

Business Name | Unique ID | Views | Size
--------------+-----------+-------+------
Business 1    | 1         | 50    | Small
Business 2    | 2         | 9     | Small
Business 3    | 3         | 67    | Large
Business 4    | 4         | 9     | Large

そのため、このスクリプトを使用して、ビューが最も少ないビジネスを取得します

SELECT * FROM ads WHERE size='Large' ORDER BY views ASC

私の質問ですが、これはすべてのビューが「9」になるまで機能し、その後は常に表示する2つの広告(各サイズに1つ)を選択するように見えます。したがって、この例では、選択されることが期待Business 4されますが、何らかの理由business 3で常に選択されます。

また、PhpMyAdminで調査し、列名をクリックしてviewsビューで並べ替えると、2つのビジネスが常に上部または下部(それぞれASCとDESC)に表示され、リストと混ざり合うことはありません。現在、ASCを並べ替えると、次のようになります。

Views
50
67
9
9 
9
9

50と67は明らかに正しい順序ではなく、Webページに常に表示される2つです。「9」以降、この2つになんらかの優先順位が割り当てられているようですが、わかりません。

また、特定のWebページから呼び出されたときのテーブルの処理方法についても説明する必要があります。

$result = mysql_query("SELECT * FROM ads WHERE size='Large' ORDER BY views ASC") or die(mysql_error());
$productCount = mysql_num_rows($result); // count the output amount
if ($productCount > 0) {
    if($row = mysql_fetch_array($result)){ 
            $id = $row["id"];
        $url = $row["url"];
        $views = $row["views"];
            $businessName = $row["businessName"];
    }
}
$views = $views + 1;
$sql = mysql_query("UPDATE ads SET views='$views' WHERE id='$id'");

これは私のウェブサイトのすべてのページのphpコードにあります。

広告は次のHTMLコードで表示されます。

<div id="ad1">
        <a href="<?php echo $url; ?>" target="_blank"> <img src="inventory_images/<?php echo $id; ?>.jpg" alt="<?php echo $businessName; ?>" height="144" width="216"/></a>
    </div>

うまくいけば、それは十分な情報です、あなたの助けは大歓迎です!

4

1 に答える 1

1

「views」列が「char」や「varchar」ではなく「int」と入力するように設定されていることを確認してください。そうしないと、期待どおりに並べ替えられません。

于 2012-07-06T20:23:48.757 に答える