【问题标题】:Matching variable to two columns joined (PHP)将变量匹配到连接的两列(PHP)
【发布时间】:2015-03-26 17:30:01
【问题描述】:

查询中的前一个变量给了我一个值 $name。我需要找到与该名称关联的用户 ID,但是在我的用户表中,我有两个字段,名字和姓氏。

我不能分解 $name,因为我有双重名称(例如 John Eric Smith)和姓氏(例如 Jan van der Worde)的情况,所以我尝试找到一种方法来匹配 firstName + lastName 与 $name。

我的尝试是这样的:

$drid = "SELECT id FROM users WHERE CONCAT(firstName,' ',lastName)='$name'";
$rest = mysql_query($drid);
while ($row = mysql_fetch_row($rest)) {
    $driver_id = $row[0];
} 

不幸的是,$driver_id 没有任何结果(而 $name 返回结果)。

感谢您的帮助!

【问题讨论】:

  • 为什么不直接用前面的查询查询出id呢?
  • @JonathanKuhn - 上一个查询只是从较长的文本字符串中提取名称,因此其中没有任何内容可以指示用户 ID。

标签: php mysql


【解决方案1】:

您是否正在寻找这样的东西:

<?php
$drid = "SELECT id FROM users WHERE CONCAT(firstName, ' ', lastName) LIKE '%".$name."%'";
$rest = mysql_query($drid);
while ($row = mysql_fetch_row($rest)) {
    $driver_id = $row[0];
}
?>

【讨论】:

  • 这似乎也不会产生任何结果,但我看到 LIKE 会更可取,因为 $name 是一个字符串(或者更确切地说,它的剩余部分)。好习惯!
  • @WillWP 当然,这就是我为您的案例编写此查询的原因。
  • 欢迎您。如果这对您有帮助,请支持我的回答并接受它。 :)
  • 嗯,我想我们越来越近了,你可以这样试试吗? $drid = "SELECT id FROM users WHERE CONCAT(firstName,' ',lastName) LIKE '%$name%'";
  • 您是否回应了您的查询并死掉了?并检查它粘贴mysql? echo $drid = "SELECT id FROM users WHERE CONCAT(firstName,' ',lastName) LIKE '%$name%'"; die;
【解决方案2】:

出于性能原因,我建议添加一个新的全名字段或使用临时表而不是使用 concat。

如果您正在寻找临时解决方案,https://stackoverflow.com/a/29285246/3923450 应该可以工作

【讨论】:

  • 谢谢雅各布,我只是在寻求临时解决方案,因为这是一次性更新“旧”表中的字段 - 新记录已经准备好包含所需的所有信息。
猜你喜欢
  • 1970-01-01
  • 2015-08-24
  • 2011-11-30
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多