Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL-如何根据数据库中的长度(字符)调整查询_Php_Mysql - Fatal编程技术网

PHP/MySQL-如何根据数据库中的长度(字符)调整查询

PHP/MySQL-如何根据数据库中的长度(字符)调整查询,php,mysql,Php,Mysql,我在这里得到了很好的支持,所以我想我应该再试一次,因为我甚至不知道从哪里开始寻找这个答案 我有一个简单的MySQL数据库,名为“推荐”,其中包含3个表,“id”、“名称”、“内容” 我想做的是在一个固定大小的块中显示推荐信。只是简单地显示内容一点问题都没有,但是我陷入困境的是(某种程度上)我试图让它工作的独特方式。我想在每次页面加载时显示一个随机项,然后检查推荐信中“内容”的字符长度,如果它等于或大于XX长度,则只显示一个推荐信,否则如果长度小于XX,则显示第二个推荐信(假设它与第一个组合不会损

我在这里得到了很好的支持,所以我想我应该再试一次,因为我甚至不知道从哪里开始寻找这个答案

我有一个简单的MySQL数据库,名为“推荐”,其中包含3个表,“id”、“名称”、“内容”

我想做的是在一个固定大小的块中显示推荐信。只是简单地显示内容一点问题都没有,但是我陷入困境的是(某种程度上)我试图让它工作的独特方式。我想在每次页面加载时显示一个随机项,然后检查推荐信中“内容”的字符长度,如果它等于或大于XX长度,则只显示一个推荐信,否则如果长度小于XX,则显示第二个推荐信(假设它与第一个组合不会损坏容器盒)

该框宽362px,高353px,使用Verdana的14px字体。该证明将如何出现在页面上的示例如下:

“这是推荐内容,来自客户的一些好消息。”
--疯狂乔酒馆老板比利·鲍勃

数据库中的“name”表以粗体显示所有内容(当然不包括-),以防有人需要询问

当我打字的时候,我感觉自己好像在祈求奇迹,但我还是会发帖,希望有人能知道答案。一如既往,感谢你对我的帮助,如果这只是要求太多,我并不完全反对一次只展示一份证明,并制定一条基本规则,要求他们必须继续n至少XX个字符

谢谢

快速更新:我没想到会这么快得到答案,我现在不在办公桌上,所以我一坐下就看哪个答案最合适。不过,你们会聚在一起,试着让你们的答案比以前的答案更复杂吗?哈哈,谢谢你们,感谢所有提供帮助的人,你们真是棒极了


最终编辑:我决定反对这个想法,因为它只是让一切变得复杂。目前,我只想显示所有的推荐信,并让它们滚动,同时我还要制作一个jQuery代码片段,使其更漂亮。不过,感谢大家的帮助!如果我再次决定这样做,我将尝试我选择的答案。

只需要一个循环。伪代码:

$length=0;
$target=200;//或其他
而($length<$target){
$comment=getOneComment();
displaycoment($comment);
$length+=strlen($comment['content']);//假设getOneComment()返回关联数组
}

为了使其美观,如果显示框的高度是固定的,您可以使用一些jQuery来切换是否显示not的第二条注释。

类似的内容是您需要的

<?php
$str = $res["testimonial"];
if (strlen($str) > 50) {
    // Logic to retrieve and display second testimonial
}
?>

假设您在一个数组中有推荐信:

$testimonials = array(
     't1' => array(
         'content' => 'testimonials 1 content..',
         'author' => 'the author'
     ),
     't2' => array(
         'content' => 'testimonials 2 content..',
         'author' => 'the author 2'
     ),
);
您可以有一个
MaxLengthEstimationContent
MaxLentAllTestimonNials
变量:

$maxLengthTestimonialsContent = 120;
$maxLenthAllTestimonnials = 240;
现在,通过一个简单的循环,您将构建用于显示以下内容的阵列证明:

$testimonialsToShow = array();

$i = 1; $totalLength = 0
foreach($testimonials as $t) {
    if( $i > 1 && strlen( $t['content']) < $maxLengthTestimonialsContent
        &&  $totalLength < $maxLenthAllTestimonnials  )
        break; // basically here you test that testimonials less first
               // and with less length than maxLengthTestimonial, and also
               // total length less than maxLengthAll to be stored 
               //in $testimonialsToShow

    else {
        $testimonialsToShow[] = $t;
        $totalLength = $t['content'];
    }

}
$estiminationalstoshow=array();
$i=1;$totalLength=0
foreach($t的推荐){
如果($i>1&&strlen($t['content'])<$MaxLengthEstimationalContent
&&$totalLength<$maxLenthAllTestimonnials)
break;//基本上,在这里,你可以先测试一下推荐信
//长度小于MaxLengthConditional,并且
//要存储的总长度小于maxLengthAll
//以美元计算,这是一场精彩的演出
否则{
$t[]=t;
$totalLength=$t['content'];
}
}

你可以使用<代码>如果条件,它可以工作。比如“代码>如果(STRLLN($text)>20){//显示某物{ / /显示别的东西}/<代码)>我会公开承认我和PHP几乎不太好,可能是任何真正阅读这个问题的人,但我确实考虑了STRUNLY()。,实际上我的想法和你建议的差不多,有一堆if/ifelse语句,但是我所做的代码看起来很可笑,哈哈。我也想过将每个推荐信加载到一个数组中,但我认为这不是正确的方向。下面的答案有没有被证明是有用的?我显然不在你的水平上在PHP中使用el,但我可以遵循您的逻辑;函数,我想我不明白你打算用它来实现这一点。我知道你说这是伪代码,但我对PHP还不够熟练,无法完全理解你,无法尝试实现这一点。我想说的是跟踪第一条注释的长度。如果它超过某个阈值(我在上面称之为
$target
,并任意给出了200的值),则不显示另一条注释。如果不显示,则显示另一条注释。您也可以在显示之前进行检查。例如,您可能希望
$target
为200,结果前两条注释分别为120和100。然后,您将不希望显示第二条注释。您可以通过放置
$length
首先更新,然后添加一个
break
命令,如果
$length>$target
哦,这对我来说更有意义,谢谢!看起来我要到明天早上才能回到我的办公桌,但我非常感谢你花时间向我解释这一点!我想我在这里跟你说,基本上使用strlen()要检查显示的初始推荐信的长度,如果小于XX显示一秒,如果大于或等于XX,请不要显示一秒。我遇到的主要问题是随机化,比如如何随机选择推荐信,但是如果太长而无法选择另一个推荐信,则不包括第一个推荐信……我越是想到这一点我越是开始觉得这不是最好的主意..克里斯蒂提供的答案
$testimonialsToShow = array();

$i = 1; $totalLength = 0
foreach($testimonials as $t) {
    if( $i > 1 && strlen( $t['content']) < $maxLengthTestimonialsContent
        &&  $totalLength < $maxLenthAllTestimonnials  )
        break; // basically here you test that testimonials less first
               // and with less length than maxLengthTestimonial, and also
               // total length less than maxLengthAll to be stored 
               //in $testimonialsToShow

    else {
        $testimonialsToShow[] = $t;
        $totalLength = $t['content'];
    }

}