Тогда все разговоры про оптимизацию, выборки и прочее, является бесконечным и бесполезным холиваром без привязки к конкретной задаче. Что и наблюдается во всех тредах к этому посту.
Никто не говорил, что таблицы не связаны)) Таблицы имеют связь. И делается она не только для того, чтобы обеспечить «связанные» выборки, но и для поддержания этой самой целостности(речь про внешние ключи).
Не понятно, почему способ выборки должен влиять на появление хвостов. Или я не правильные выводы из вашего высказывания выше сделал?
«давайте выберем все строчки со всеми связанными деталями»
Нет. Исходная задача другая. Товар-Цена имеет отношение «один-ко-многим». Нужно получить массив товаров, с полями «цена» и отдать куда-нибудь дальше для вывода-обработки. При этом уберем запросы к бд из цикла. Не больше и не меньше. Условия отбора товаров я оставил за пределами поста.
Спустя сутки. Такого сильного фидбэка не ожидал. Посмотрите, сколько комментариев выше. И какие решения предлагают — inner join, union, поиск по фаловой системе, кэширование… Похоже всем известное решение, которое применяется ряде ORM, известно только мне, вам и еще нескольким людям) Ну и разрабам этих самых ORM.
Предлагаю протестить. Уверен, что мой вариант выиграет по скорости.
SQL иньекции в этот вопрос не входит. И в конкретном случае не возможна. Посмотрите внимательно код.
Вы не правы. Массивы в ПХП не сортируются по индексам. Они будут именно в той последовательности в которой вы их в массив положите. Только я отмечу, что обычно массивы обхожу следующим образом:
foreach($products as $product_id => &$product) {
//что-то делаю с proudct...
}
Пример в статье. Первый кусок кода с запросом в цикле, второй запрос находится вне цикла. Результат в первом случае в базу совершается 8 запросов, во втором 2. И 2 будет независимо от количества товаров.
Не понятно, почему способ выборки должен влиять на появление хвостов. Или я не правильные выводы из вашего высказывания выше сделал?
Нет. Исходная задача другая. Товар-Цена имеет отношение «один-ко-многим». Нужно получить массив товаров, с полями «цена» и отдать куда-нибудь дальше для вывода-обработки. При этом уберем запросы к бд из цикла. Не больше и не меньше. Условия отбора товаров я оставил за пределами поста.
Сильный аргумент. Спасибо.
SQL иньекции в этот вопрос не входит. И в конкретном случае не возможна. Посмотрите внимательно код.