Последние часы я пытался выяснить, как сгенерировать подходящий запрос MySQL для доступа к моим данным. Это моя структура таблицы sql:
CREATE TABLE IF NOT EXISTS `record` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`client` int(11) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
)
CREATE TABLE IF NOT EXISTS `clip` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`record` int(11) NOT NULL,
`data` int(11) NOT NULL,
)
CREATE TABLE IF NOT EXISTS `data` (
`clip` int(11) NOT NULL,
`name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`value` text COLLATE utf8_unicode_ci NOT NULL,
)
Я максимально уменьшил количество таблиц. запись таблица содержит данные клиента, затем clip используется для присоединения этого клиента к некоторым параметрам клиента, которые хранятся в data . Каждый клиент может иметь столько записей , сколько ему нужно, и каждая запись состоит из неопределенного числа * клипов * s. Затем каждый клип ссылается на некоторые данные значения.
Хорошо, запрос, который я ищу, это тот, который дал лист , data * name * и value , он получает последний ( дата ) * клиент *, который выполняет условие имя = * имя_символа * И значение = * дано_значение *. Я ищу клиентов, которые выполняют это условие в записи LAST, хранящейся в базе данных.
Я пришел к этому предложению:
SELECT client
FROM clip, record
WHERE clip.id IN (SELECT clip FROM `data` WHERE name='level' AND value='2')
Но он возвращает всех клиентов, не только последние, и все мои тесты, включая date , были неудачными.
РЕДАКТИРОВАТЬ : После некоторых попыток и ошибок и благодаря идеям, которые вы мне дали, я пришел к запросу, который, кажется, работает, но он действительно сложен, и я совершенно уверен Вы можете помочь мне упростить:
SELECT * FROM clip, data
WHERE data.clip=clip.id
AND record IN (SELECT id
FROM record a
WHERE date = (
SELECT MAX(date)
FROM record b
WHERE a.client = b.client
)
)
AND data.name='NAME_HERE' AND data.value='VALUE_HERE'
Ну, это не совсем то, что я хочу, мне нужен идентификатор клиента, но он дает мне последнюю запись для этого клиента, которой мне достаточно.