За последние 24 часа нас посетили 38024 программиста и 1811 роботов. Сейчас ищут 889 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем amf1k, 16 май 2015.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    ну в несколько запросов все это делается, тут один запросом не обойтись.
     
  2. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    вот именно, сначала получаю количество айди актеров и количество общих фильмов по каждому актеру, получаю массив
    Код (PHP):
    1. $arrayRoles = array(
    2. array("actor"=>2,"countMovies"=>1),
    3. array("actor"=>6,"countMovies"=>2),
    4. array("actor"=>8,"countMovies"=>2),
    5. array("actor"=>9,"countMovies"=>3),
    6. array("actor"=>84,"countMovies"=>1),
    7. );
    8.  
    теперь нужно выбрать всю инфу по каждому с актеров, и добавить количество общих фильмов, вод над этим я и запарился!( как это реализовать???
     
  3. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Код (Text):
    1. SELECT * FROM таблица_актёров WHERE id = '$id_actor'
    выберите всю информацию о актёре. Это вы хотели?

    Добавлено спустя 1 минуту 47 секунд:
    а, да.
    Код (Text):
    1. $id_actor = $arrayRoles[0][actor];
     
  4. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    мне нужно выбрать всю инфу об всех актерах в массиве $arrayRoles одним запросом, я не каждого по отдельно!
     
  5. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Код (PHP):
    1. <?php
    2. $arrayRoles = array(
    3. array("actor"=>2,"countMovies"=>1),
    4. array("actor"=>6,"countMovies"=>2),
    5. array("actor"=>8,"countMovies"=>2),
    6. array("actor"=>9,"countMovies"=>3),
    7. array("actor"=>84,"countMovies"=>1),
    8. );
    9.  
    10. $query = "SELECT * FROM таблица_актёров WHERE ";
    11.  
    12. $countArr = count($arrayRoles) - 1;
    13. $i = 0;
    14. foreach($arrayRoles as $arr) {
    15.     $query .= "id = ".$arr["actor"];
    16.     if ($i >= $countArr) {break;}
    17.     else {$query .= " OR ";}
    18.     $i++;
    19. }
    20. echo $query;
    21. ?>
    Добавлено спустя 16 секунд:
    здорово, правда? :)
     
  6. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    норм, но я думаю этот вариант будет проще
    Код (Text):
    1.  
    2. select актеры.*, count(роли.id) as "количество общих фильмов"
    3. from роли
    4. left join актеры on роли.id_actor = актеры.id
    5. where id_movie in(
    6.   select id_movie
    7.   from роли
    8.   where id_actor = $айди_1
    9. )
    10. group by актеры.id
    только не могу сортировать по количеству общих фильмов(

    Добавлено спустя 9 минут 41 секунду:
    вот решил свою задачу, может кому то пригодится
    Код (PHP):
    1. $query = 'SELECT `actors`.*, count(`roles`.`id`) as `count_movies` FROM `roles` LEFT JOIN `actors` ON `roles`.`actor`=`actors`.`id` WHERE `movie` IN(
    2. SELECT `movie` FROM `roles` WHERE `actor` = `переменная с айди`) AND `actors`.`id` != `переменная с айди`  GROUP BY `actors`.`id` ORDER BY `count_movies` DESC';
    3.  
     
  7. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    а разве сюда не подойдет оператор IN ?
     
  8. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    в смысле?
     
  9. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Код (Text):
    1. SELECT * FROM table_name WHERE some_id IN (4, 1, 2, 5, 3)
    в скобках собственно перечисляешь IDы, будет тоже самое что и WHERE ... OR WHERE ... OR WHERE ..., а возможно и еще быстрее.
     
  10. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    ну выбрал я всю инфу по всем тем актерам, а количество общих фильмов куда я дену???
     
  11. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Что сложного я не могу понять

    1. ты делаешь запрос - получить все фильмы актера с id=1
    2. у тебя есть все id фильмов, ты делаешь запрос к 3-й таблице, выбрать все фильмы - и в итоге получаешь кучу записей с id актеров и id фильмов
    3. далее уже средствами РНР все полученные данные перебираешь, подсчитываешь и т.д.

    или я может что то не так понимаю?
     
  12. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    он хочет уместить всё в одном запросе
     
  13. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    ну а вот так делать не стоит, когда говорили что надо делать за 1 запрос имелось ввиду если он хочет получить допустим все фильмы автора, тогда это надо делать за 1 запрос, как то так.

    да и на сколько я понимаю это не возможно, т.к. в одном запросе мы получаем данные и на основе этих данных мы готовим второй запрос.