以下是我的SQL查询:
$result = mysqli_query($con,"SELECT url,img_url,sentiment,title,category from invite_page where category='".$category."' where today = '".$today."' order by rt_count desc limit 3 ");
while ($row = @mysqli_fetch_array($result))
{
$url = $row['url'];
$img_url = $row['img_url'];
...
}
我正在某些显示框中向用户显示此获取的值。
问题出在几行中title
和img_url
字段在数据库中为空。我想只获取填充所有字段的记录。怎么做到这个?
如果today = '".$today."'
没有3条记录,那么它应该以今天的desc顺序记录。 (rt_count的desc顺序也应该保持。我想显示从最大值到最低值的记录)
怎么做?
答案 0 :(得分:2)
WHERE
子句。today
支票从=
更改为<=
,并将其添加到ORDER BY
条款中。
SELECT url,img_url,sentiment,title,category
FROM invite_page
WHERE category='".$category."'
AND today <= '".$today."'
AND title != ''
AND img_url != ''
ORDER BY today DESC, rt_count DESC
LIMIT 3
答案 1 :(得分:2)
您应该停止使用数据库扩展,就像旧的,已弃用的旧mysql
扩展名一样。这是不安全的,因为它允许sql注入。使用较新的mysqli
扩展名或pdo
结合已解决这些问题的预处理语句。从这个查询'prototype'开始:
SELECT url,img_url,sentiment,title,category
FROM invite_page
WHERE category = :category AND today <= :today
AND title IS NOT NULL AND img_url IS NOT NULL
ORDER BY rt_count desc, rt_count desc
LIMIT 3
是否必须像上面示例中那样检查title IS NOT NULL
或title!=''
取决于您的数据库设置,如果这些列为NULL或保留空字符串作为内容。
接下来''将'参数'绑定'到执行前的语句(确切的语法取决于你使用的扩展名,google上有数以百万计的例子:
$db->bind('category', $category);
$db->bind('today', $today);
接下来,执行预准备语句。
请注意,这不是开箱即用的,它意味着指向正确的方向。你肯定已经阅读了一些文档并研究了你在互联网上找到的一些例子。