проблема с запросом mysql - PullRequest
3 голосов
/ 25 июля 2011

у меня есть таблица с именами пользователей, вот как выглядит таблица

CREATE TABLE `users` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `password` varchar(60) NOT NULL,
  `email` varchar(60) NOT NULL,
  PRIMARY KEY (`id`)
) 

и, наконец, у меня есть таблица с именами друзей, вот как выглядит таблица

CREATE TABLE `friends` (
  `friendship_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_id1` bigint(20) unsigned NOT NULL,
  `user_id2` bigint(20) unsigned NOT NULL,
  `time_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`friendship_id`),
  KEY `user_id1` (`user_id1`),
  KEY `user_id2` (`user_id2`),
  CONSTRAINT `friends_ibfk_1` FOREIGN KEY (`user_id1`) REFERENCES `users` (`id`),
  CONSTRAINT `friends_ibfk_2` FOREIGN KEY (`user_id2`) REFERENCES `users` (`id`)
)

, так что в основномесли userA следует за userB, то в таблицу друзей будет добавлена ​​строка с атрибутом user_id1 - userA, а user_id2 - userB.

Я пытаюсь написать запрос mysql для окна поиска.пользователь введет строку, и запрос будет сканировать список пользователей, которые включают эту строку, но люди, за которыми следит пользователь, должны отображаться в первую очередь.

поэтому, если у нас 3 пользователя

  • Джек
  • Джейсон
  • Джон

если пользователь Крис (кто следует за jason) вводит в строку поиска строку 'ja', запрос будет сканировать список пользователей в следующем порядке: jason, jack.поскольку за Джейсоном следуют Крис.

, насколько я понимаю, я думаю, что это может быть проблема с группой, я пробовал разные запросы, но не смог получить необходимые результаты

У вас, ребята, есть идеи?

спасибо большое

1 Ответ

2 голосов
/ 25 июля 2011

Вы должны сделать трюк для сортировки, чтобы дружба получала 0, а не дружба - 1 во временном поле, а затем мы сортировали по возрастанию для этого поля и в качестве второй сортируем по имени пользователя

SELECT x.username
FROM users x LEFT JOIN friends y ON x.id=y.user_id2 AND y.user_id1=$LOGGED_IN_USER
WHERE LOWER(x.username) LIKE 'ja%'
ORDER BY CASE WHEN y.user_id2 IS NULL THEN 1 ELSE 0 END,x.username

@ спасибо scwagner за указание продлить предложение JOIN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...