Я создал тестовую базу данных, поскольку мне нужно переключиться на InnoDB, потому что мне нужно использовать внешние ключи и транзакции.
По какой-то причине я получаю неправильные результаты при тестировании запроса в phpMyAdmin.
У меня есть таблица users , где uid является основным / уникальным (автоинкремент) и таблица user_profiles , которая имеет uid который является первичным / уникальным и является внешним ключом для идентификатора пользователя uid в таблице users, в основном ссылающегося на столбцы uid в обеих таблицах.
Чтобы было легче понять, вот две таблицы:
CREATE TABLE `users` (
`uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`status` char(10) NOT NULL DEFAULT 'verify',
`username` varchar(15) NOT NULL,
`email` varchar(50) NOT NULL,
`password` char(32) NOT NULL,
`reg_date` int(11) NOT NULL,
`ip` varchar(39) DEFAULT NULL,
PRIMARY KEY (`uid`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
CREATE TABLE `user_profiles` (
`uid` int(10) unsigned NOT NULL,
`first_name` varchar(40) DEFAULT NULL,
`last_name` varchar(50) DEFAULT NULL,
`gender` char(6) DEFAULT NULL,
`website` varchar(100) DEFAULT NULL,
`msn` varchar(60) DEFAULT NULL,
`aim` varchar(60) DEFAULT NULL,
`yim` varchar(60) DEFAULT NULL,
`twitter` varchar(15) DEFAULT NULL,
PRIMARY KEY (`uid`),
CONSTRAINT `user_profiles_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `users` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
В основном я добавил несколько фиктивных записей в таблицу users, а затем получил users.uid и добавил uid в user_profiles, чтобы связать фиктивные записи между обеими таблицами.
Теперь проблема, которую я получил, странная, сначала вот мой запрос, который я использую в phpMyAdmin:
SELECT * FROM users INNER JOIN user_profiles
ON users.uid = '11'
По сути, этот запрос должен превратить меня только в одну из фиктивных записей из таблицы users и user_profiles, связав их вместе с помощью uid. Но как ни странно, это не так. Он возвращает все записи, даже если другие uid различны, потому что они уникальны, даже в результате запроса, он показывает, что uid уникальны и не совпадают, нет дубликатов, которых нет, и база данных все равно не допустит этого.
Теперь я не понимаю, почему, но он должен возвращать только 1 запись, так как uid уникальны, и есть только одна запись в user и user_profiles, которые имеют uid 11 (который связывает их вместе с этими uid). Как ни странно, вчера все работало нормально. Поэтому я решил удалить тестовую таблицу и начать заново, но то же самое.
У кого-нибудь есть идеи, что происходит?