gpt4 book ai didi

mysql - where 子句不起作用 mysql

转载 作者:行者123 更新时间:2023-11-29 08:19:42 26 4
gpt4 key购买 nike

我试图从一列中选择随机行,但是我有一个问题,我想选择一行 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com