【问题标题】:Get unique data from while sql query (multiple rows)从while sql查询中获取唯一数据(多行)
【发布时间】:2013-03-13 17:06:31
【问题描述】:

如何从这段代码中获得唯一的结果?我只是尝试查询 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/

【问题讨论】:

  • 1. 不要使用@ 抑制错误 2. 添加错误处理程序 3. 停止使用mysql_ 函数;它们已被弃用。使用mysqli_PDO
  • 请您详细说明您想要什么,并粘贴表格架构
  • 4.定义并且不工作.. 什么没有工作? 5.了解你的代码在做什么,我看到$tags的覆盖

标签: php sql tags cloud smarty


【解决方案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"), );
                              ^     ^                             ^     ^

【讨论】:

  • 没问题。如果这回答了您的问题,请不要忘记接受。如果您对此主题仍有疑问,请随时发表评论。
【解决方案2】:

如果您想获得唯一的tags,请尝试此查询...

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

【讨论】:

    【解决方案3】:

    你需要指定你需要什么是 DISTINCT

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多