我正在尝试从表格位置获取5个随机位置并添加随机照片(通过ID链接到它)。我已经这样做了,它使用ORDER BY RAND()工作正常,但大多数时候结果都是重复的。我会看到相同的“地方”,但另一张随机照片我放了一张图片来解释我所看到的内容。
放置1然后放置另一个放置1
之前有没有人见过这样的东西可以帮助我? 我真的很感激。
我的PHP代码:
a.map.with_index { |i,b| [b,i] }
#=> [[0, [1, 2]], [1, [1, 3]], [2, [1, 4]]]
这是HTML
/// 5 random places + 1 random photo for each place
$sqlCommand2 = "SELECT DISTINCT(places.id), places.id AS id, places.title AS title, places.latitude AS latitude , places.longitude AS longitude, places_photos.place_id, places_photos.url AS image FROM places INNER JOIN places_photos ON places.id = places_photos.place_id ORDER BY RAND() LIMIT 5";
$query2 = mysql_query($sqlCommand2) or die(mysql_error());
$count2 = mysql_num_rows($query2);
if($count2 > 1){
$places .= "";
while($row = mysql_fetch_array($query2)){
$places .= "<a href=\"places/p/?id=".$row['id']."\"><div class=\"main-place-item\" style=\"background-image: url('http://Ayoubsi.com/places/p/images/".$row['image']."');\"><div id=\"title\">".$row['title']."</div></div></a>";
} // close while
} else {
$places = "No places!";
}
答案 0 :(得分:2)
您需要group by您的结果,而不是使用DISTINCT。
将您的查询更改为:
$sqlCommand2 = "SELECT places.id, places.id AS id,
places.title AS title, places.latitude AS latitude ,
places.longitude AS longitude, places_photos.place_id,
places_photos.url AS image FROM places
INNER JOIN places_photos ON places.id = places_photos.place_id
GROUP BY places.id
ORDER BY RAND() LIMIT 5";
因为即使您使用的是DISTINCT,也可以使用JOIN。
在JOIN中,重复的结果即将到来。
答案 1 :(得分:1)
我认为您不了解SQL关键字 DISTINCT
。这是一个关键字。这是不是一个功能。
SELECT DISTINCT
适用于选择列表中表达式的所有,而不仅仅是包含在不必要的parens中的某些列。
当你写这样的陈述时:
SELECT DISTINCT(a), b, c FROM ...
第一个表达式a
周围的那些parens什么都不做。这相当于写作:
SELECT DISTINCT a, b, c FROM ...
重点是DISTINCT关键字将消除重复的行。在此示例中,a
,b
和c
(合在一起)的值复制a
,b
和{{1}的值从另一行返回。
如果您只需要表达式c
的不同值,请使用a
子句。
GROUP BY
(注意MySQL具有GROUP BY的非标准扩展,允许表达式 SELECT a, b, c
FROM ...
GROUP BY a
和b
是非聚合,其他数据库将抛出错误.MySQL将返回一个值c
和b
来自其中一个折叠(“分组”)的行,但这些值中的哪些行不是确定性的。)
答案 2 :(得分:0)
请在RAND()函数中使用“seed”。如下所示。
$seed=time();
$query="SELECT * FROM my_table ORDER BY RAND($seed) LIMIT $amount OFFSET $offset";
答案 3 :(得分:0)
从您的查询中我猜你每个地方都有多张照片。
对于每个地方,您想要随机展示其中一张照片吗?
如果没有,那么您可以使用查询
$sqlCommand2 = "SELECT
`places`.`id`,
`places`.`title`,
`places`.`latitude`,
`places`.`longitude`,
`places_photos`.`place_id`,
`places_photos`.`url` AS `image`
FROM
`places`
JOIN
`places_photos`
ON
`places`.`id` = `places_photos`.`place_id`
GROUP BY `places`.`id`
ORDER BY
RAND()
LIMIT 5";
如果你想选择随机照片,你需要使用像这样的子查询
$sqlCommand2 = "SELECT
`x`.`id`,
`x`.`title`,
`x`.`latitude`,
`x`.`longitude`,
`x`.`place_id`,
`x`.`url` AS `image`
FROM (
SELECT
*
FROM
`places`
JOIN
`places_photos`
ON
`places`.`id` = `places_photos`.`place_id`
ORDER BY
RAND()
) AS 'x'
GROUP BY
`x`.`id`
LIMIT 5";