Мое первое предложение - изменить структуру таблицы. Вы не должны иметь имя как в mastersearches, так и в usersearches. Это приводит к необходимости менять имя в обоих местах. Имя при запросе должно происходить из одного места, а не из обоих. Я не вижу цели для поиска пользователей таблицы. Почему это существует? Я считаю, что он содержит информацию, которая может быть получена из master и searchtable.
Во-вторых, у вас не должно быть количества друзей, которых вы вводите вручную в таблице поиска. Это часто приводит к дополнительной работе по подсчету этого. Либо фактор программно, либо установите его в виде формулы, например:
SELECT m.*, f.Name as 'Friends_Name', count(s.searchID) as 'Friends'
FROM searchtable f
left join searchtable s
on f.ID = f.Id
left join mastersearches m
on s.searchID = m.ID
group by f.ID
Теперь нам нужно добавить поле в таблицу поиска для хранения, когда друг был введен в таблицу, в качестве поля я выбрал lastmodified.
SELECT m.ID, m.Name, f.Name as 'Friends_Name', count(s.searchID) as 'Friends'
FROM searchtable f
left join searchtable s
on f.ID = f.Id
left join mastersearches m
on s.searchID = m.ID
where m.srchtime < s.lastmodified
group by f.ID
Если вам нужна дополнительная помощь, пожалуйста, дайте мне знать.
Следует принять к сведению, что в каждой строке отображается число «Друзья», но оно отражает имя мастера, а не имя поиска.
Вот код для создания таблиц, которые я создал, используя его модель.
DROP TABLE IF EXISTS `stack overflow`.`mastersearches`;
CREATE TABLE `stack overflow`.`mastersearches` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Name` text NOT NULL,
`srchtime` time NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `stack overflow`.`searchtable`;
CREATE TABLE `stack overflow`.`searchtable` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`searchID` text NOT NULL,
`Name` text NOT NULL,
`friends` int(10) unsigned NOT NULL,
`lastModified` time NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=228 DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `stack overflow`.`usersearches`;
CREATE TABLE `stack overflow`.`usersearches` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`masterID` int(10) unsigned NOT NULL,
`Name` text NOT NULL,
`nooffriends` int(10) unsigned NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;