0

列からランダムな行を選択しようとしていますが、1 つの問題がありますtitle != '';。I putand r1.title != '';空のタイトルを表示します。後で反響してい$row['image_one'];ます。最初の行には image_one と title があり、2 番目の行には image_one があり、title はありません。タイトル付きの 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>
4

4 に答える 4

1

NULLと同じではないためです''。空でないタイトルを見つける必要がある場合は、クエリを次のように変更する必要があります。

 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 IS NOT NULL AND r1.title != '' 
     ORDER BY r1.id ASC
     LIMIT 1  

または、次のことをお勧めします。

SELECT id, title, price, image_one FROM (
    SELECT id, title, price, image_one, RAND() as rnd
      FROM table
     WHERE title IS NOT NULL AND title != '' 
  ORDER BY rnd
) s
LIMIT  1;
于 2013-11-03T22:46:01.530 に答える
0

これを試して:r1.title <> ''

https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_not-equal

于 2013-11-03T22:59:38.893 に答える