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

时间:2013-10-28 21:38:32

标签: php mysql

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

我有一个简单的MySQL数据库,名为“testimonials”,其中包含3个表,“id”,“name”,“content”

我想要做的是在固定大小的区块内显示推荐书。只是简单地显示内容完全没有问题,但是我被卡住的是(有点)独特的方式我试图让它工作。我想在每个页面加载时显示一个随机项目,然后检查推荐内“内容”的字符长度,如果它等于或大于XX长度,则只显示一个推荐,否则如果是长度小于XX以显示第二个推荐(假设它与第一个证明相结合不会破坏容器盒)。

有问题的盒子宽度为362像素,高度为353像素,使用14dx字体和Verdana。证词如何出现在页面上的示例如下:

“这是推荐内容,来自客户的一些好消息。”
- Billy Bob,所有者,Crazy Joe's Tavern

数据库中的“名称”表以粗体显示所有内容(当然是减去),以防有人觉得有必要提问。

正如我输入的那样,我觉得好像在寻求奇迹,但我仍然会发布这个问题,希望有人可能只知道答案。和往常一样,感谢我可能得到的任何帮助,如果这只是简单地要求太多,我并不完全反对一次只显示一个推荐书的想法,制定一个基本规则,说他们必须包含至少XX个字符

谢谢!

快速更新:我没想到得到这么快的答案,我现在不在我的办公桌前,所以一旦我坐下来,我就会看到哪个答案最合适。但是,你们聚在一起试图让你的答案比以前的答案更复杂吗?大声笑,谢谢,对于任何提供帮助的人,你们摇滚!

最终编辑:我决定反对这个想法,因为它只是复杂的一切。目前,我只是展示所有推荐,并让它们滚动,同时我在jQuery片段上工作以使其更漂亮。谢谢大家的帮助!如果我再次决定这样做,我会尝试我选择的答案。

3 个答案:

答案 0 :(得分:0)

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

$length = 0;
$target = 200; // or whatever
while( $length < $target ) {
    $comment = getOneComment();
    displayComment($comment);
    $length += strlen( $comment['content'] ); // assuming getOneComment() returns an associative array
}

为了使它漂亮,如果显示框将是一个固定的高度,你可以使用一些jQuery来切换是否显示第二个评论。

答案 1 :(得分:0)

这就是你需要的东西。

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

显然,你需要做更多的处理来确定第二个推荐书是否足够短以适应与否。但这应该让你开始。

编辑: 对于随机化,我在我自己的网站上使用它:

$referrals = mysql_query("SELECT id FROM ts_testimonials");
$referralView = array();
$i = 0;
while ($newReferral = mysql_fetch_array($referrals)) {
  $referralView[$i] = $newReferral['id'];
  $i++;
}
if (sizeof($referralView) >= 1){
  $referralTop = rand(0,sizeof($referralView)-1);
  $newReferralTop = mysql_fetch_array(mysql_query("SELECT * FROM ts_testimonials WHERE id = '".$referralView[$referralTop]."'"));
  if (sizeof($referralView) >=2){
    $referralBottom = rand(0,sizeof($referralView)-1);
    while ($referralBottom == $referralTop) {
      $referralBottom = rand(0,sizeof($referralView)-1);
    }
    $newReferralBottom = mysql_fetch_array(mysql_query("SELECT * FROM ts_testimonials WHERE id = '".$referralView[$referralBottom]."'"));
  }
}

答案 2 :(得分:0)

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

$testimonials = array(
     't1' => array(
         'content' => 'testimonials 1 content..',
         'author' => 'the author'
     ),
     't2' => array(
         'content' => 'testimonials 2 content..',
         'author' => 'the author 2'
     ),
);

您可以拥有maxLengthTestimonialsContentmaxLenthAllTestimonnials变量:

$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'];
    }

}