从sql查询中获取唯一数据(多行)

时间:2013-03-13 17:06:32

标签: php sql tags cloud smarty

如何从此代码中仅获得唯一结果?我只是尝试查询 SQL SELECT DISTINCT语句并且不起作用:(

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

include_once ('/var/www/video/configs/db.php'); 

$query = @mysql_query("SELECT * FROM videos ORDER BY VIDEOID ASC LIMIT 0,10");
while($row = @mysql_fetch_array($query)){ $tags = $row['tags']; }

$rand = rand(5, 55);
$list  = explode(',', $tags);
foreach ($list as $link) { 
$tags = array( array('tag' => "$link", 'num' =>  $rand, 'link' => "$link"), ); 

$array = array_unique($tags); print_r($array);

}
?>

只需要在我的网站上实现这个

http://www.xarg.org/2008/08/tag-cloud-plugin-for-smarty/

3 个答案:

答案 0 :(得分:1)

要从数据库中获取唯一tags,您必须正确构建查询。 建议:

SELECT DISTINCT tags FROM videos ORDER BY videoid ASC LIMIT 0, 10

这应该返回唯一的tags

此外,在编程时,了解代码的作用是关键。以下不是您想要做的:

while($row = @mysql_fetch_array($query)){ $tags = $row['tags']; }

每次抓取每一行并覆盖$tags,这意味着您只能抓取最后一个标记。您想构建一个标记数组:

while($row = @mysql_fetch_array($query)){ $tags[] = $row['tags']; }

这就是说每次都要添加一个新的数组项。您可以通过覆盖foreach$tags语句中执行相同的操作。

然后,您可以通过删除

中不需要的引号来使代码更整洁
$tags = array( array('tag' => "$link", 'num' =>  $rand, 'link' => "$link"), );
                              ^     ^                             ^     ^

答案 1 :(得分:0)

如果您尝试获取唯一tags,请尝试此查询...

SELECT DISTINCT tags FROM videos ORDER BY VIDEOID ASC LIMIT 0, 10

答案 2 :(得分:0)

您需要指定您需要的内容DISTINCT

SELECT DISTINCT MyColumnName FROM videos ORDER BY VIDEOID ASC LIMIT 0,10