さて、私は複数の広告を持っている私のデータベースを持っています...しかし私は追加された同じサイトからの複数の広告を持っています....ここに例があります。
ご覧のとおり...データベースには異なる2つのリンクがあります...しかし、それらは同じサイトにつながります。私の目標は、ランダムに1つを選択して表示する一方で、他のすべてを選択して表示することです。これが私が現在持っているコーディングです:
<?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>
';
}
?>
ランダムに選択された丸で囲んだものを表示したいのですが、各セットの両方を表示したくありません。
MySQLのバージョン8.0(またはMariaDB 10.2)以降では、をmainsite
使用して同じレコードの各グループから1つのランダムなレコードを選択ROW_NUMBER()
し、外部クエリでランダムに並べ替えることができます。ORDER BY RAND()
SELECT * FROM (
SELECT
t.*,
ROW_NUMBER() OVER(PARTITION BY mainsite ORDER BY RAND()) rn
FROM ads t
) x WHERE rn = 1
ORDER BY RAND()
以前のバージョンのMySQL / MariaDBでは、これは面倒になります。1つの解決策は、変数のペアを使用してグループを追跡し、行番号を割り当てることです。
SELECT *
FROM (
SELECT
a.*,
CASE
WHEN @mainsite != mainsite THEN @rn := 1
ELSE @rn := @rn + 1
END rn,
@mainsite := mainsite
FROM
(SELECT * FROM ads ORDER BY RAND()) a
CROSS JOIN (SELECT @rn := 0, @mainsite := NULL) r
ORDER BY a.mainsite
) s
WHERE rn <= 1
ORDER BY RAND()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加