【问题标题】:How optimize while in while code? [duplicate]在while代码中如何优化? [复制]
【发布时间】:2014-06-24 12:21:06
【问题描述】:

我的代码是:

$text = '12-10-4-32-45-name-sara-x-y-86';
$array = explode('-',$text);
foreach($array as $value) {
    $sql = mysql_query("SELECT * FROM `table` WHERE `pid`='$value' ORDER BY `id` LIMIT 3");
    while($row = mysql_fetch_array($sql)) {
        echo $row['title'];
        echo '';
    }
    echo '';
}

此代码可以正常工作,但如果在 $text 中使用 150 变量,则服务器停机!

如何针对大多数变量优化此代码?!

谢谢

【问题讨论】:

  • 使用IN 子句,也许吧? $sql = mysql_query("SELECT * FROM table WHERE pid IN ($in) ...。 (请注意,上面的代码仍然容易受到 SQL 注入的影响。此外,mysql_* 函数已被弃用。您应该切换到 MySQLi/PDO 并使用准备好的语句正确转义输入。)
  • 了解 MySQL IN 子句
  • 这个问题可能对你有帮助:stackoverflow.com/questions/8270134/…
  • 将所有值放入 1 个字符串变量中,用“,”分隔,然后将其放入查询中。在您的查询中使用 pid IN (......)
  • 谢谢,但是对于每个变量 echo 3 标题!怎么修的?!

标签: php variables process foreach while-loop


【解决方案1】:

如果您需要所有这些作为 id(其中包括一个奇怪的字符串)。考虑这个例子:

$text = '12-10-4-32-45-name-sara-x-y-86';
$text = array_unique(explode('-', $text)); // just in case there are duplicate ids
$statement = 'SELECT * FROM `table` WHERE `pid` IN("'.implode('", "', $text).'") ORDER BY `id` LIMIT 3';

// should be like this
// SELECT * FROM `table` WHERE `pid` IN("12", "10", "4", "32", "45", "name", "sara", "x", "y", "86") ORDER BY `id` LIMIT 3
// then just continue on your mysql_query
$sql = mysql_query($statement);
while($row = mysql_fetch_assoc($sql)) {
    // print your values or whatever it is you need to do
    // echo $row['title'];
}

注意:您不需要查询每个值,那将完全浪费资源。想象一下,您的文本(如您所说)有 150 个数字。尝试使用mysql的IN(),这样它就可以进行一次查询。

【讨论】:

  • 谢谢,但我使用 NUMBER AND VARCHAR !
  • @user3612383 如果你真的需要它们都在查询中,我编辑了答案
  • 谢谢,但是这段代码返回最后 3 三个查询。但我想为 $text 的每个值获取最后 3 个三个查询
  • 好吧,这种情况之前没有指定,当前的答案不符合这种情况。如果你真的想查询$text 的每个值,那么我可以建议使用 msqli multi_query 代替,或者你可以先将每个查询分配到一个数组中,然后释放结果
猜你喜欢
  • 2022-11-23
  • 1970-01-01
  • 2010-12-05
  • 2011-09-29
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 2011-04-09
相关资源
最近更新 更多