Здесь множество проблем, но все сводится к выполнению так называемого запроса N + 1 . Вы делаете один запрос для извлечения N строк, а затем делаете N больше запросов, по одному для каждой строки, чтобы получить дополнительную информацию.
Вы можете сделать это все за один выстрел с JOIN
:
SELECT x, users.username FROM y WHERE (x conditions)
LEFT JOIN users ON users.username=y.username
Таким образом, вы можете получить все эти данные одновременно. Стоит отметить, что использование username
в качестве такого ключа часто очень проблематично, так как вам нужно либо наложить целый ряд каскадных условий запуска для отслеживания ссылочной целостности, либо у вас вообще не будет никакой ссылочной целостности. Попробуйте использовать числовые значения в качестве первичных ключей в вашей базе данных и используйте такие вещи, как username
только в качестве меток для людей.
Риск здесь заключается в том, что если кто-то удаляет свою учетную запись, а другой человек создает учетную запись с точно таким же именем, они «наследуют» этих друзей от прежней личности. Это проявилось на больших сайтах и вызвало массу проблем, когда люди фактически получают право собственности на контент, от которого отказались другие.