Есть ли способ сделать что-то вроде:
SELECT (user OR NULL if field IS NULL)
FROM user
WHERE (
field = 'id'
OR field IS NULL
)
Моя база данных настроена на
+-----------
| bookmarks
+-----------
| id int not null primary key
| title varchar(255) not null
| url varchar(255) not null
| icon varchar(255)
| description varchar(255)
| addedby int foreignkey references users(id) on delete set null
+-----------
+-----------
| users
+-----------
| id int not null primary key
| email varchar(255) not null
| user varchar(255) not null
| pass varchar(255) not null
+-----------
+-----------
| user_bookmarks
+-----------
| user_id foreignkey references user(id) on delete cascade
| bookmark_id foreignkey references bookmarks(id)
| primarykey(user_id, bookmark_id)
+-----------
Я пытаюсь изменить запрос:
SELECT DISTINCT B.*, MU.user, MUB.subscribers
FROM user_bookmarks UB, bookmarks B, users U, (
SELECT bookmark_id, COUNT(bookmark_id) AS subscribers
FROM user_bookmarks
GROUP BY bookmark_ID
) AS MUB, (
SELECT user, id
FROM users
) AS MU
WHERE MUB.bookmark_id = UB.bookmark_id
AND B.id = MUB.bookmark_id
AND UB.user_id = $id
AND U.id = UB.user_id
AND MU.id = B.addedby
Мой запрос, вероятно, ужасен, с SQL я не часто работаю.
То, что я хочу сделать, это компенсировать, когда пользователь больше не находится в системе (пользователь, который добавил закладку (addedby
)), когда закладка просматривается с помощью идентификатора другого пользователя, который все еще подписан (U.id = $id
), я хочу, чтобы поле пользователя (MU.user
) оставалось, но было заполнено null
.
Пример вывода (в настоящее время) с использованием $id = 93
:
id, title, url, icon, description, addedby, user, subscribers
'93', 'title93', 'https://www.somewhere93.com', '', 'Something 93', '93', 'user93', '10'
'94', 'title94', 'https://www.somewhere94.com', '', 'Something 94', '94', 'user94', '10'
'95', 'title95', 'https://www.somewhere95.com', '', 'Something 95', '95', 'user95', '10'
'96', 'title96', 'https://www.somewhere96.com', '', 'Something 96', '96', 'user96', '10'
'97', 'title97', 'https://www.somewhere97.com', '', 'Something 97', '97', 'user97', '10'
'98', 'title98', 'https://www.somewhere98.com', '', 'Something 98', '98', 'user98', '10'
'99', 'title99', 'https://www.somewhere99.com', '', 'Something 99', '99', 'user99', '10'
'100', 'title100', 'https://www.somewhere100.com', '', 'Something 100', '100', 'user100', '10'
'102', 'title102', 'https://www.somewhere102.com', '', 'Something 102', '2', 'user2', '8'
id 101
отсутствует, это потому, что (SELECT * FROM bookmarks WHERE id = 101
) Поле addedby
равно нулю, я хочу, чтобы мой запрос также возвращал закладку 101, аналогичную другой только с user
и addedby
будучи нулевым, поскольку пользователь больше не существует:
id, title, url, icon, description, addedby
'101', 'title101', 'https://www.somewhere101.com', '', 'Something 101', NULL