Нет, такого способа нет ни в MySQL, ни в любом известном мне диалекте SQL.
Вы должны разбить строку 20001-1-2011-01-07 14:04:40
в своем PHP и использовать ее части для построения запроса MySQL.
Я мог бы также добавить, что составной первичный ключ может быть не самой лучшей идеей в плане производительности (особенно с таблицами InnoDB)
Кроме того, INT(5)
по-прежнему занимает столько же места, сколько INT(11)
(или просто INT
в этом отношении).Для меньших целочисленных типов используйте TINYINT
, SMALLINT
и MEDIUMINT
Неуклюжий раздел Обходные пути
Решения ниже должны работать так, как вы хотите, ноза счет ресурсов и / или производительности.Если вы действительно не можете найти самое простое решение, вы не должны их использовать.
A ужасный способ сделать это будет выглядеть так WHERE CONCAT(OfficeCode,IssuerId,BulletinDtm) = '20001-1-2011-01-07 14:04:40'
Это УЖАСНО , потому что это не позволит MySQL использовать индекс для фактического ускорения запроса.
Не делайте этого, пожалуйста.
Другой способ.Добавьте столбец CHAR(32)
в свою таблицу и сделайте его своим ПК.Сохраните в нем MD5-хэш ваших предыдущих столбцов PK (т. Е. MD5 ('20001-1-2011-01-07 14:04:40'). Затем вы можете запросить как: WHERE newPKcolumn = MD5('20001-1-2011-01-07 14:04:40')
. Это позволит вам делать то, чтовы хотите, и MySQL будет использовать индекс. Таблица больше не нормализуется, но денормализация - это компромисс, который вам нужно иногда делать для повышения производительности или удобства использования. В этом нет ничего плохого.