Php MYSQL RAND()将不会生成正确的列表

Php MYSQL RAND()将不会生成正确的列表,php,mysql,select,Php,Mysql,Select,我无法从我的选择中获得正确的结果。表wp_rdp_category_image有3列:id(唯一)-category_name-category_image 在下面的选择中,我需要最多4个类别名称和每个类别名称中的1个类别图像 有人能帮我纠正这个选择吗?那太好了。提前谢谢 下面是php代码: function show_game_category_images_func() { $content = ''; $i = 1; $record = $GLOBALS['wpdb

我无法从我的选择中获得正确的结果。表wp_rdp_category_image有3列:id(唯一)-category_name-category_image

在下面的选择中,我需要最多4个类别名称和每个类别名称中的1个类别图像

有人能帮我纠正这个选择吗?那太好了。提前谢谢

下面是php代码:

function show_game_category_images_func() {
    $content = '';
    $i = 1;
    $record = $GLOBALS['wpdb']->get_results('
    SELECT * FROM wp_rdp_category_images
    ORDER BY `category_name`, RAND()
    LIMIT 4 
    ');

    if($record){
        foreach($record as $key => $rec){                   
            // if($key == 'picture' && $rec != null && $rec != '')     
            $rec = '<img src="'.$upload_url.$record->category_image.'" width="150" height="150">';

            if ($i == 1) {
                echo '<span><img src="'.$upload_url.$rec->category_image.'" ></span>';  // even
            }
            if ($i == 2) {
                echo '<span><img src="'.$upload_url.$rec->category_image.'" ></span><br>';  // even
            }
            else {
                echo '<span><img src="'.$upload_url.$rec->category_image.'" ></span>';   // odd
            }
            $i++;
        }
    }   
    return $content;
}
add_shortcode('show_game_category_images', 'show_game_category_images_func');
这是一张测试表:

CREATE TABLE IF NOT EXISTS `wp_rdp_category_images` (
  `id` int(12) NOT NULL AUTO_INCREMENT,
  `category_name` varchar(32) NOT NULL,
  `category_image` varchar(64) NOT NULL,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;

INSERT INTO `wp_rdp_category_images` (`id`, `category_name`, `category_image`) VALUES
(1, 'natuur', 'natuur1.jpg'),
(2, 'natuur', 'natuur4.jpg'),
(4, 'aarde', 'aarde3.jpg'),
(5, 'sport', 'sport2.jpg'),
(6, 'aarde', 'aarde3.jpg'),
(7, 'auto', 'autogrijs.jpg'),
(8, 'auto', 'autowit.jpg'),
(9, 'auto', 'autoblack.jpg'),
(10, 'auto', 'autoroodzwart.jpg'),
(11, 'aarde', 'aarde1.jpg'),
(12, 'aarde', 'aarde2.jpg'),
(13, 'sport', 'sport4.jpg'),
(14, 'sport', 'sport3.jpg'),
(15, 'sport', 'sport1.jpg'),
(16, 'natuur', 'natuur2.jpg'),
(17, 'natuur', 'natuur3.jpg'),
(18, 'people', 'people1.jpg'),
(19, 'people', 'people2.jpg'),
(20, 'people', 'people3.jpg'),
(21, 'people', 'people4.jpg'); 

您可以使用以下查询:

select     category_name,
           (select   category_image
            from     wp_rdp_category_images
            where    category_name = main.category_name
            order by rand()
            limit    1) category_image
from       wp_rdp_category_images main
group by   category_name
order by   rand()
limit      4

如果需要结果集中的所有列,请使用以下变量:

select     main.*
from       (
            select     category_name,
                       (select   id
                        from     wp_rdp_category_images
                        where    category_name = main.category_name
                        order by rand()
                        limit    1) id
             from       wp_rdp_category_images main
            ) sub
inner join  wp_rdp_category_images main
        on  main.id = sub.id
group by    main.category_name
order by   rand()
limit      4

PHP代码 您的PHP有一个问题,因此第一行会重复。请注意,当
$i
为1时,您将执行第一个
if
中的两个部分,但也将执行第二个
if
else
中的部分

如果,则需要在第二个
之前放置一个
else

if($i==1){
echo“category_image.”“>”;//偶数
}else if($i==2){/!!在这里添加了“else”!
回显“类别图像”。“>
”;//偶数 } 否则{ echo“category_image.”“>”;//奇数 }
但你的评论似乎表明你想写两个专栏。在这种情况下,最好这样写:

echo“类别图像”。“>”;//全部的
如果($i%2==0)回显“
”;//甚至只有
类似随机id的东西

SELECT DISTINCT category_name, category_image
FROM `wp_rdp_category_images`
WHERE `id` > RAND() * (SELECT MAX(id) FROM `wp_rdp_category_images`)   
ORDER BY id
0 LIMIT 4

按代码中的
category\u name
手动排序4个结果。

您想要什么?让它选择正确的随机行!你有什么错误想和我们分享吗?有些人期待你能展示的结果?我没有得到任何错误。只需要4个唯一的类别名称,包括相关图像。像这样的结果:natuur,natuur1.jpg aarde,aarde3.jpg auto,autowit.jpg people,people2.jpgOh然后这变成了一个有趣的问题。这是我的一票(对其中有趣的部分)。但是,请注意,并非所有数据都是唯一的(不包括auto_inc.),这是正确的。排除id字段,其余字段不唯一。我有很多带有图片的类别名称。但我需要从我的选择中获得最多4个。表中的4个唯一名称。我没有指定一个唯一的字段。澄清一下:听起来你想要一个包含四个随机选择的类别的结果集。与每个类别关联,您希望从该类别的图像中随机选择一个图像。对吗?请澄清你的问题。是的,必须是凭身份证订购。更奇怪的是,你检查小提琴了吗?有五张图片,因为有五个类别。你想省略哪一类?也是随机的?我将其添加到查询和小提琴中。我最多需要4个结果。每只猫都有一个随机的猫名+随机的猫名。如果我做了你的最后一次更新,并限制2我得到3作为结果。当limit=4时,结果是5。这两个结果不是唯一的。你检查小提琴了吗?你有什么不同的做法?一定有什么…你的更新在phpmyadmin中可以正常工作,但在php中不能。
SELECT DISTINCT category_name, category_image
FROM `wp_rdp_category_images`
WHERE `id` > RAND() * (SELECT MAX(id) FROM `wp_rdp_category_images`)   
ORDER BY id
0 LIMIT 4