2012-07-06 62 views
1

我是自学的编码器,所以我也许忽略了一些很简单的回答我没有在课堂上回暖,但...一行始终在最前面在MySQL

我有一个DB充满了不同的企业,他们的Unique ID与他们在我的服务器上的图片的名称相对应。每当我网站上的一个页面加载时,我都希望php以最少的视图抓取业务(和后续广告)。如果它是适当的,我也有两种不同的广告尺寸。我会尽力说明。

表:

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”则似乎只是选择两个广告(每个尺寸之一)总是显示。所以在这个例子中,你会期望Business 4被选中,但由于某种原因,business 3总是被选中。

此外,当我在PhpMyAdmin中进行调查时,我点击列名views按视图进行排序,并且两个业务始终在顶部或底部(分别为ASC和DESC)一起从未与列表混合。现在,当我整理ASC我得到:

Views 
50 
67 
9 
9 
9 
9 

50和67是明显不正确的顺序,他们是一直在网页上所示的两个。看起来在“9”之后,这两个分配了某种优先级,我无法弄清楚。

我还要提到,当通过特定的网页调用表的处理方式:

$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> 

希望这是足够的信息,你的帮助是非常感谢!

回答

1

确保您的“视图”列设置为键入“int”而不是“char”或“varchar”,否则它将不会像您期望的那样排序。

+0

我的想法。阿尔法排序 – 2012-07-06 20:26:17

+0

一页长的问题,和一个句子的答案,我觉得像一个娃娃!我的意见被设置为varchar。为了将来的参考它是如何排序的,数字中的整数数量 - 我想这将是字符串的长度?非常感谢!我今天早上花了大约3小时试图弄清楚这一点! – 2012-07-06 20:28:59

+0

正如托尼所说,它只是按字母顺序排列,所以53在9之前,因为它通过比较第一个字符开始,5开始于9之前。 – Braiba 2012-07-06 20:41:01

相关问题