是否可以找到主键列名称,并在同一查询的WHERE子句中使用它?

时间:2018-09-28 16:23:53

标签: php mysql sql in-subquery

由于我喜欢在数据库中进行小的查找时(通常是出于测试/检查的目的)编写最小的代码,所以我为此编写了一个小的“包装器”。

代替以下内容:

 $dbh->prepare("UPDATE table SET multiple = ?, fields = ? WHERE id = ? LIMIT 1");
 $dbh->execute($val1,$val2,$id);

我可以将其简化为:

$db->u('table SET multiple, fields',[$val1, $val2, $id]);

当sql字符串中没有WHERE时,它会自动假定它应该使用表主kay列作为标识符。
但是id并非始终都是主键的名称。因此,为了使其正常工作,我将以下代码添加到了包装器中:

$PRI = $dbh->query("SHOW KEYS FROM $T WHERE Key_name = 'PRIMARY'")->fetchColumn(4);  

$T是包装器的一部分,包含表名。
$PRI是主要查询中使用的...

这将返回该表中主键的名称,以便我可以在查询中使用它。
当然,这不能在所有情况下都起作用,具体取决于表的设置,但是在大多数情况下,它可以。

也可以这样做:

$db->u('table SET multiple, fields WHERE column = ?',[$val1, $val2, $id]);

添加WHERE column = ?(尤其是WHERE)时,虽然不需要额外的查询...这都是为了减少编写,并且不需要记住每个主要列;)< / p>

因此,有没有一种方法可以将SHOW KEYS查询包含在主查询中-看起来像这样:

SELECT fields FROM table WHERE (SHOW KEYS ...) AND other = ? AND colums = ?

因此不必一次运行两个查询吗?

0 个答案:

没有答案