Стоит ли принимать $_GET параметр в функцию?

KotOFF

Новичок
Стоит ли принимать $_GET параметр в функцию? например принимаем $_GET['id']
PHP:
function getResult($id){
//что то делаем с  $id
}
print_r (getResult($_GET['id']));

function getResult(){
$id = $_GET['id'];
//что то делаем с  $id
}
print_r (getResult());
какая здесь разница???
 

ksnk

прохожий
Это такой психологический тест? ;)

Функцию с параметром ты мог бы вызвать еще несколько раз, с другими параметрами. Функцию без параметров, вообще говоря, можно вызвать только один раз.
 

KotOFF

Новичок
с этим все ясно, спасибо)
2-й вопрос:
пришел массив айдишников с формы
PHP:
$arr = array(1,4,9,20);
вариант первый:
есть функция выборки инфы по id
PHP:
function getResult($id){
    //Функция возвращает инфу с БД (чего то) по id
}
нужно в цикле вывести информацию по айдишниках с формы
PHP:
foreach($arr as $value){
    $result = getResult($value);
    echo $result['поле чего то'];
}
вариант второй:
есть функция выборки инфы
PHP:
function getResult($array){
        //преобразование массива айдишников в строку
        $list_id = implode(',', $array);
    //запросс
    $query = 'SELECT `все поля` FROM `таблица` WHERE `id` IN("$list_id")';
    //Возвращаем массив по выбранным id
}
и простой вывод
PHP:
$arr = getResult($arr);
foreach($arr as $value){
    echo $value['поле чего то'];
}
какой вариант будет правильней и быстрее???
 

Absinthe

жожо

ksnk

прохожий
в первом случае у тебя остается сортировка, задаваемая порядком айдишек, во втором сортировка теряется. Хотя ее можно и не терять, за счет усложнения запроса.
совершенно не очевидно, что один запрос, выводящий X значений будет быстрее, чем X простых запросов с выборкой по ключу. Если хочется быстроты - нужно каждый раз смотреть по месту и дорабатывать напильником...
 

KotOFF

Новичок
а если с формы придет массив айдишников, и каждому айдишнику будет привязано "что-то", например
PHP:
$arr = array (
array('id'=>1,'дополнительное поле'=>'что-то'),
array('id'=>4,'дополнительное поле'=>'что-то'),
array('id'=>9,'дополнительное поле'=>'что-то'),
array('id'=>20,'дополнительное поле'=>'что-то')
);
и нужно вывести всю инфу по этим айдишникам и добавить каждому айдишнику поле => 'что-то' при выводе!
как это реализовать? 2-й вариант уже не сработает(
 

Василий М.

Новичок
Стоит ли принимать $_GET параметр в функцию?
да. всегда. не надо использовать возможности суперглобавлов лишь потому, что они суперглобалы.
функция или метод должны принимать явное значение и это должно быть прозрачно.
функция или метод не должны быть черным ящиком.
 
  • Like
Реакции: AmdY

KotOFF

Новичок
да. всегда. не надо использовать возможности суперглобавлов лишь потому, что они суперглобалы.
функция или метод должны принимать явное значение и это должно быть прозрачно.
функция или метод не должны быть черным ящиком.
яснопонятно, но мне это пака ещё не надо, я не знаком с ООП!(((
 

Василий М.

Новичок
с этим все ясно, спасибо)
2-й вопрос: какой вариант будет правильней и быстрее???
однозначного ответа не может быть.
я бы реализовал два этих метода.
я так и делаю, кстати.
и использовал бы их там, где надо. либо получение одной записи, когда действительно нужно 1 запись дернуть, либо список когда он нужен.
 

Василий М.

Новичок
а если с формы придет массив айдишников, и каждому айдишнику будет привязано "что-то", например
PHP:
$arr = array (
array('id'=>1,'дополнительное поле'=>'что-то'),
array('id'=>4,'дополнительное поле'=>'что-то'),
array('id'=>9,'дополнительное поле'=>'что-то'),
array('id'=>20,'дополнительное поле'=>'что-то')
);
и нужно вывести всю инфу по этим айдишникам и добавить каждому айдишнику поле => 'что-то' при выводе!
как это реализовать? 2-й вариант уже не сработает(
а это надуманная задача из разряда говнокода. ты сейчас как бы пишешь интерфейс над СУБД, поэтому не надо то-то надумывать. у функций, отвечающие за получение данных из СУБД, не должно быть знаний о твоей бизнес-логике и прочих частных операциях.
 

KotOFF

Новичок
поставим другую задачу!
есть 3 таблицы:
1-я фильмы ( поля id,title и т.д )
2-я актеры ( поля id,name и т.д )
3-я роли в фильмах (поля id_movie, id_actor) - это для связки фильмов и актеров
Мы зашли на страницу актера, например айди 1, вывели его фильмы - это просто)
Теперь мне надо вывести на этой же страницы всех актеров, которые играли роли вместе с этим актером (айди 1) в одном фильме, и подсчитать количество общих фильмов по каждому актеру!
Пример: станица актера - айди 1
он играл роль с актером - айди 2 (количество общих фильмов - 1)
он играл роль с актером - айди 6 (количество общих фильмов - 2)
он играл роль с актером - айди 8 (количество общих фильмов - 2)
он играл роль с актером - айди 9 (количество общих фильмов - 3)
он играл роль с актером - айди 84 (количество общих фильмов - 1)
выборку делаю в таблицы роли (получаю количество айди актеров и количество общих фильмов по каждому актеру), а выводить информацию об актерах мне уже надо с таблицы актеры, как с этим быть???
 

WMix

герр M:)ller
Партнер клуба
Код:
select актеры.*, count(роли.id) as "количество общих фильмов"
from роли
left join актеры on роли.id_actor = актеры.id
where id_movie in(
  select id_movie
  from роли
  where id_actor = $айди_1
)
group by актеры.id
 

KotOFF

Новичок
Код:
select актеры.*, count(роли.id) as "количество общих фильмов"
from роли
left join актеры on роли.id_actor = актеры.id
where id_movie in(
  select id_movie
  from роли
  where id_actor = $айди_1
)
group by актеры.id
спасибо, то что нужно) вы меня спасли) Вы единственный человек, который меня понял в этой задачи. Не знал что можно все это реализовать одним запросом, а то я тут уже начал лепить велосипед, ещё раз БОЛЬШОЕ СПАСИБО)
 

Absinthe

жожо
а если с формы придет массив айдишников, и каждому айдишнику будет привязано "что-то", например
PHP:
$arr = array (
array('id'=>1,'дополнительное поле'=>'что-то'),
array('id'=>4,'дополнительное поле'=>'что-то'),
array('id'=>9,'дополнительное поле'=>'что-то'),
array('id'=>20,'дополнительное поле'=>'что-то')
);
и нужно вывести всю инфу по этим айдишникам и добавить каждому айдишнику поле => 'что-то' при выводе!
как это реализовать? 2-й вариант уже не сработает(
Передавать содержимое такой формы в json в теле POST.

а это надуманная задача из разряда говнокода. ты сейчас как бы пишешь интерфейс над СУБД, поэтому не надо то-то надумывать. у функций, отвечающие за получение данных из СУБД, не должно быть знаний о твоей бизнес-логике и прочих частных операциях.
Нет, это не надуманный говнокод, а обычная практика для сложных форм с большим количеством логики на клиенте.
 

KotOFF

Новичок
Код:
select актеры.*, count(роли.id) as "количество общих фильмов"
from роли
left join актеры on роли.id_actor = актеры.id
where id_movie in(
  select id_movie
  from роли
  where id_actor = $айди_1
)
group by актеры.id
ещё маленький вопрос, как теперь сортировать по количеству общий фильмов, то есть чем больше общих фильмов, тем выше актер при выходе, пример:
актер 2 - общих фильмов 4
актер 41 - общих фильмов 2
актер 44 - общих фильмов 2
актер 15 - общих фильмов 1
а то при выходе получаю сортировку по айди актера
 

WMix

герр M:)ller
Партнер клуба
=) с синтаксисом придеться самому разобраться
 
Сверху