Мне нравится решать следующую проблему. В моей базе данных есть разные строки, связанные с датой. Каждая дата будет иметь от трех до двадцати строк, связанных с ней во время работы системы.
Теперь я хотел бы отправить запрос в базу данных со списком строк. База данных должна вернуть мне дату, которая имеет наибольшее количество общих строк с запросом.
Я создал образец базы данных, которую вы можете создать с помощью сценария SQL, добавленного к этому сообщению. В этом примере мой запрос будет содержать строки “abc”, “yz”, “def”, “jkl”
. Затем база данных должна упорядочить дату в соответствии с количеством совпадающих укусов. Это означает, что (100, '2005-05-05 05:05:05')
должно быть первым, а (103, '2008-08-08 08:08:08')
должно быть последним. Нет необходимости сортировать строки с одинаковым количеством совпадающих строк по другим критериям.
Я использую MySQL 5.5.11. Как мне достичь этой цели?
CREATE TABLE sampledate(
id INT NOT NULL PRIMARY KEY,
time TIMESTAMP NOT NULL );
CREATE TABLE properties(
idprop INT NOT NULL PRIMARY KEY,
property VARCHAR(45) NOT NULL,
iddate INT NOT NULL,
FOREIGN KEY (iddate) REFERENCES sampledate(id)
);
INSERT INTO sampledate (id, time) VALUES ( 100, '2005-05-05 05:05:05');
INSERT INTO sampledate (id, time) VALUES ( 101, '2006-06-06 06:06:06');
INSERT INTO sampledate (id, time) VALUES ( 102, '2007-07-07 07:07:07');
INSERT INTO sampledate (id, time) VALUES ( 103, '2008-08-08 08:08:08');
INSERT INTO properties (idprop, property, iddate) VALUES (201, "abc", 100);
INSERT INTO properties (idprop, property, iddate) VALUES (202, "def", 100);
INSERT INTO properties (idprop, property, iddate) VALUES (203, "ghi", 100);
INSERT INTO properties (idprop, property, iddate) VALUES (204, "jkl", 100);
INSERT INTO properties (idprop, property, iddate) VALUES (301, "def", 101);
INSERT INTO properties (idprop, property, iddate) VALUES (302, "mno", 101);
INSERT INTO properties (idprop, property, iddate) VALUES (303, "pqr", 101);
INSERT INTO properties (idprop, property, iddate) VALUES (304, "stu", 101);
INSERT INTO properties (idprop, property, iddate) VALUES (305, "vwx", 101);
INSERT INTO properties (idprop, property, iddate) VALUES (401, "vwx", 102);
INSERT INTO properties (idprop, property, iddate) VALUES (402, "pqr", 102);
INSERT INTO properties (idprop, property, iddate) VALUES (403, "ghi", 102);
INSERT INTO properties (idprop, property, iddate) VALUES (404, "mno", 102);
INSERT INTO properties (idprop, property, iddate) VALUES (501, "vwx", 103);
INSERT INTO properties (idprop, property, iddate) VALUES (502, "mno", 103);
INSERT INTO properties (idprop, property, iddate) VALUES (503, "yz", 103);