mysql - where 子句不起作用 mysql

标签 mysql sql

我试图从一列中选择随机行,但是我有一个问题,我想选择一行 title != ''; 下面没有给我我想要的。我把 和 r1.title != ''; 这显示了空标题。我稍后会回显 $row['image_one']; 。我有两行,第一行有 image_one 和标题,第二行有 image_one 但没有标题。它显示带有标题的 image_one,然后当我刷新页面时,我得到空页面。我希望它继续只向我显示带有标题的图像,

SELECT r1.id, title, price, image_one
FROM table AS r1 
    JOIN (
        SELECT (RAND() * (SELECT MAX(id) FROM table)) AS id
    ) AS r2
WHERE 
    r1.id >= r2.id 
AND r1.title != '' 
ORDER BY r1.id ASC
LIMIT 1  

html

<?php include_once("models/config.php");?>
<div class="ho_col_1_pr">
 <?php 
    $stmt = $mydb->prepare("SELECT r1.id, title, price, image_one
            FROM hm_table AS r1 JOIN
               (SELECT (RAND() *
                 (SELECT MAX(id)
             FROM table)) AS id)
            AS r2
     WHERE r1.id >= r2.id and r1.title != ''
     ORDER BY r1.id ASC
     LIMIT 1 ");
     $stmt->execute();
if ( false===$stmt ) {
  die('prepare() failed: ' . htmlspecialchars($mydb ->error));
} 

     ?>
  <?php      
$result = $stmt->get_result(); 
 while ($row = $result->fetch_assoc()) {?>
<div class="pro_img_wrap">

     <div class="hid_tit"><div class="hid_tit_ex"><?php echo wordwrap($row['title'], 50, "<br/>\n", true);?></div></div>

  <?php

  $path = 'images/';
  echo "<a href='test.php?redirect=".urlencode($row['title'])." & item=".$row['id']."'>"."<img src='".$path."".$row['image_one']."' style='width:225px;height:169px;'/>"."</a>";?>
    </div>
    <div class="pr_sep">
    <div class="pr_prod">
  <?php
  var_dump($row['title']) ;
  echo $row['price'];?>
  </div>
 <?php
 }
?></div>
</div>

最佳答案

我最好的猜测是表中的最大 id 的标题为空。因此,当随机数生成器生成接近 1 的值时,没有记录匹配,并且您的代码将 NULL 值/空行与空字符串混淆。

您可以通过将查询修改为获取随机行的其他方法来解决此问题(如其他答案中所述)。您还可以通过对查询进行小幅调整来修复它。首先,这里对您的查询进行了轻微的重写(主要消除了不必要的子查询以获得最大值):

SELECT r1.id, title, price, image_one
FROM table r1 JOIN
     (SELECT RAND() * MAX(id) as id
      FROM table
     ) r2
WHERE r1.id >= r2.id AND r1.title != '' 
ORDER BY r1.id ASC
LIMIT 1;

修复方法是在子查询中重复条件 title != '':

SELECT r1.id, title, price, image_one
FROM table r1 JOIN
     (SELECT RAND() * MAX(id) as id
      FROM table
      WHERE title != ''
     ) r2
WHERE r1.id >= r2.id AND r1.title != '' 
ORDER BY r1.id ASC
LIMIT 1;

当然,做你想做的事的更简单的方法就是:

SELECT r1.id, title, price, image_one
FROM table r1
ORDER BY rand()
LIMIT 1;

但是,这在较大的表上确实存在可扩展性问题。

关于mysql - where 子句不起作用 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19759106/

相关文章:

php - SELECT 中的 mySQL 空 SELECT 不应为整个查询返回 null

C++ MySQL 准备语句

php - 如何在运行时在 MySQL 中创建表并将其保存到数据库中

c# - 在不考虑区域设置的情况下将日期插入 SQL

python - 如何更改 `id` 字段的初始值?

mysql查询合并一张表上的2个选择

php - 传递两个变量

javascript - store如何查询Mysql

javascript - 正确插入表名

php - 查询日期和时间范围