【问题标题】:Can I use an if on foreach in such a case? [closed]在这种情况下,我可以在 foreach 上使用 if 吗? [关闭]
【发布时间】:2016-09-30 17:07:16
【问题描述】:

我有一个小问题,正在尝试从 mysql 表中读取值。我已经进行了研究,但无法找到明确或确凿的答案。我将描述问题:

  1. 使用 where 例如 where gender=female 从 mysql 表中选择数据。
  2. 计算结果并返回计数 - 只是为了帮助了解找到了多少条记录
  3. 比较表中的值,例如“已采取”和“可用”,
  4. if 'taken' = 'available' 在第一条记录中,转到下一条记录(并再次比较),如果没有在这种情况下执行特定操作,可以更新或插入或任何类似的操作。

前三个没问题,唯一的问题是,第 4 部分。请帮助。这是一个php问题。期待您的帮助。

【问题讨论】:

  • 为什么不通过将满足此条件的所有记录包含在您的 SQL 语句中来获取所有记录,而不是浪费时间和处理能力来使用 PHP 比较值?
  • @theommessin 我很想知道这一点。您能否提供更多信息
  • 例如:SELECT * from `users` WHERE `gender` = 'female' AND `taken` = 'available'
  • 您是否正在尝试建立一个在线约会网站? XD
  • 实际上,taken 是一个具有整数值的列,与available 的情况相同。假设正在检查是否为女士预订了酒店房间。检查提供的大厅是否已满,然后在分配房间时检查下一个。

标签: php mysqli


【解决方案1】:

如前所述,如果您只是要跳过记录,那么您最好不要一开始就检索它们(从而产生将它们提取到 PHP 内存等的开销):

SELECT * FROM `your_table` WHERE `gender` = 'female' AND `taken` = `available`;

但是,如果您有特定的理由这样做,您只能执行以下操作:

foreach ($hotels as $hotel) {
    // skip if the item is not available, logic can be changed if necessary
    if ($hotel->taken >= $hotel->available) continue;

    // do the other work here...
}

我在这里稍微解释了您的条件,假设您想跳过不“可用”的人。尽管看起来您确实想要相反的结果,但在这种情况下,您可以将 sql 中的逻辑从 != 切换到 =,并将 php 中的逻辑从 != 切换到 ==

更新:反映制作的其他 cmets。

【讨论】:

  • 是的!这是我一直在寻找的,但稍作修改。
【解决方案2】:

使用 mysqli 或使用 PDO 创建与数据库的连接。

$db = new PDO($mysqlhost,$username,$password);
$statement = $db->prepare($sqlstatement);
$rows = $statement->execute();
foreach($rows->fetch() as $row)
{
    if($row['column_name']==something)
{
   //do work
}
else
{
  //do work
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2016-09-12
    • 2016-11-07
    • 2022-08-05
    • 2018-05-05
    • 1970-01-01
    • 2022-11-14
    相关资源
    最近更新 更多