Можно ли найти имя столбца первичного ключа и использовать его в WHERE-предложении того же запроса? - PullRequest
0 голосов
/ 28 сентября 2018

Поскольку мне нравится писать наименьшее количество кода при выполнении небольших поисков в базе данных, в основном для целей тестирования / проверки, я написал для него небольшую «обертку».

Вместо следующего:

 $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), нет необходимости в этом дополнительномхотя запрос ... Это все о сокращении написания, и не нужно помнить каждый первичный столбец;)

Итак, есть ли способ включить запрос SHOW KEYS в основной запрос - это будет выглядетькак это:

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

То есть не нужно запускать два запроса одновременно?

...