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

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

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

 $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]);

Когда нет WHERE в строке sql автоматически предполагается, что в качестве идентификатора следует использовать основной столбец 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 = ?

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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]