Первичный ключ отличается от столбца с первичный ключ на нем. Первичный ключ - это как индекс, так и ограничение, которое помещается в один или несколько столбцов, а не сам столбец. Ваш запрос псевдокод:
SELECT PRIMARY_KEY
FROM tablename
эквивалентно следующему:
SELECT keyname
FROM tablename
Какой недействительна. То, что вам действительно нужно выбрать, - это столбец, а не ключ.
К сожалению, нет псевдонима столбца или простой функции, которую вы можете использовать для указания столбцов с ограничениями первичного ключа. Скорее всего, он недоступен, поскольку первичный ключ может применяться к нескольким столбцам.
Чтобы увидеть, какие столбцы имеют ограничение PRIMARY, вы можете использовать некоторое отражение, запросив таблицы схем, используя SHOW COLUMNS
и т. Д. Просто сделав SELECT * FROM tablename LIMIT 1
, вы получите все имена столбцов в результате, если вы хотите принять первая колонка имела ограничение первичного ключа.
Конечно, вы можете просто сделать SELECT *
в любом случае, если вы не знаете имя столбца.
Если вы не хотите делать дополнительный запрос для получения имени столбца для построения запроса, используя встроенные метаданные или свои собственные, я бы прислушался к ответам Марка B, если можно.
Это не будет очень гибко, но если у вас есть только 3 таблицы, вы можете просто иметь функцию или массив сопоставлений, которые просто getPkName ('images') == 'image_id' и т. Д. – Corbin
Да, учитывая мою текущую ситуацию, я мог просто сделать 'substr', чтобы удалить' s' с конца имени табуляции и объединить на нем '_id'. Я просто ищу что-то более гибкое, чем это можно сделать в одном выражении SQL. –
Насколько я знаю, вам нужно будет сделать дополнительный запрос, чтобы получить имя (и использовать PHP). То, что вы могли бы подумать, - это захват всех имен первичных ключей в первый раз и их кеширование. В зависимости от вашей ситуации это может быть ужасная производительность, но это будет держать ее достаточно гибкой. – Corbin