Я не завидую вам этот проект. Похоже, он разрывается с антипаттернами.
Вот предложение: множество внешних объединений в запросе может быть дорогостоящим. И получить все эти категории в отдельных столбцах неудобно. Попробуйте вместо этого:
SELECT u.*, c.CategoryName
FROM users AS u
LEFT JOIN Category AS c
ON (c.id IN (u.categoryid, u.categoryid_2, u.categoryid_3, u.categoryid_4,
u.categoryid_5, u.categoryid_6, u.categoryid_7, u.categoryid_8,
u.categoryid_9, u.categoryid_10))
WHERE u.id = 65447;
Еще один трюк, который вы можете сделать (учитывая, что вы пометили этот вопрос mysql
):
SELECT u.*, GROUP_CONCAT(c.CategoryName) AS CatList
FROM users AS u
LEFT JOIN Category AS c
ON (c.id IN (u.categoryid, u.categoryid_2, u.categoryid_3, u.categoryid_4,
u.categoryid_5, u.categoryid_6, u.categoryid_7, u.categoryid_8,
u.categoryid_9, u.categoryid_10))
WHERE u.id = 65447
GROUP BY u.id;
Это сокращает вывод до одной строки, и все строки CategoryName
объединяются вместе, разделяя их запятыми. См GROUP_CONCAT()
.