Трябва ли да се използват множество SQL извиквания, когато това може да се направи в едно извикване, ако едното извикване връща повтарящи се данни?
Например, и това е наистина прекалено опростена версия на това, което се опитвам да направя, ние искаме да получим информация за потребителите и техните любими групи. Ако го направих с едно обаждане, можех да направя:
SELECT userName, userAge, userGender, bandName FROM users NATURAL JOIN userBands NATURAL JOIN bands WHERE userID = 47
Това ще ми върне списък с всички групи, които потребителят харесва, но за всяка една ще върне потребителското име, възраст и пол.
Мога да направя две обаждания...
SELECT userName, userAge, userGender FROM users WHERE userID = 47
SELECT bandName FROM userBands NATURAL JOIN bands WHERE userID = 47
където първият просто връща основната информация веднъж, а вторият просто връща списъка с ленти. Има ли някаква най-добра практика с това? Има ли друг начин да подходя към това, който не осъзнавам? И какво, ако (както ще бъде в моя случай от реалния свят), че не са само две извиквания за разделяне на данните, а 4 или 5? Така че има много повече обаждания, но също така се връщат много повече външни данни, за да се направи това в едно обаждане.
Използвам PHP PDO, ако това има значение в отговора.
NATURAL JOIN
, защото ще завърши със сравняване на две колони, които наистина не очаквате. Това е особено разпространено в големите производствени dbs, които имат склонност да имат колони за проверка (катоinserted_at
времеви клейма), които не са сравними в много ситуации (особено ако колоните не са с префикс имена на таблици - това се счита за шум в повечето случаи). Защо съхранявате възрастта, тъй като тя е производна стойност? - person Clockwork-Muse   schedule 14.12.2014