SQL按随机顺序选择,但不要从特定列中选择重复项

时间:2019-02-18 19:47:55

标签: php mysql sql random

好,因此我的数据库中包含多个广告...但是,我已经添加了来自同一网站的多个广告。...这是一个示例。

enter image description here

如您所见...数据库具有两个不同的链接...但是它们指向相同的站点。我的目标是让它随机选择其中一个并显示它,而不显示另一个,同时还选择所有其他并显示它们。这是我目前使用的编码:

<?php
$query = 'SELECT * FROM `ads`';
        $results = mysqli_query($connect, $query) or die(mysql_error());
        while ($row = mysqli_fetch_array($results, MYSQLI_ASSOC)) {
            extract($row);
            echo '
                <div class="col-sm-6">
                <div class="card mb-30"><a class="card-img-tiles" href="'.$link.'">
                    <div class="inner">
                      <div class="main-img"><img src="'.$image.'" alt="'.$alt_title.'"></div>
                    </div></a>
                  <div class="card-body text-center">
                    <h4 class="card-title">'.$name.'</h4>
                    '.$about.'
                    <a class="btn btn-outline-primary btn-sm" href="'.$link.'">Check It Out</a>
                  </div>
                </div>
              </div>
            ';
            }
?>

我希望它显示随机选择的带圆圈的圆圈,而不是每组都显示。

enter image description here

1 个答案:

答案 0 :(得分:1)

从MySQL 8.0版(或MariaDB 10.2)开始,您可以使用@Override public void onBackPressed() { AlertDialog.Builder builder = new AlertDialog.Builder(this); // ... builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MyActivity.super.onBackPressed(); } }); builder.setNegativeButton("Cancel", null); builder.show(); } 在具有相同mainsite的每组记录中选择一个随机记录,然后使用以下命令在外部查询中进行随机排序ROW_NUMBER()

ORDER BY RAND()

在MySQL / MariaDB的早期版本中,这变得很乏味。一种解决方案是使用一对变量来跟踪组并分配行号:

SELECT * FROM (
    SELECT 
        t.*,
        ROW_NUMBER() OVER(PARTITION BY mainsite ORDER BY RAND()) rn
    FROM ads t
) x WHERE rn = 1
ORDER BY RAND()