PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (8): « 1 [2] 3 4 5 6 7 8 »

> Найдено сообщений: 111
amf1k Отправлено: 18 Мая, 2015 - 13:31:25 • Тема: вывод по двоим значениям одного поля • Форум: SQL и Архитектура БД

Ответов: 4
Просмотров: 67
есть 2 таблицы фильма(movies) и роли в фильме(roles)
структура movies:
id, title
структура roles
movie - айди фильма
actor - айди актера, игравшего роль в этом фильме
вопрос - нужно вытащить все фильмы, где играют роль 2 определенных актера(например актер - айди 1 и айди 2)
есть запрос, который выводить все фильмы 2 этих актеров
SELECT `title` FROM `roles` LEFT JOIN `movies` ON `roles`.`movie`=`movies`.`id` WHERE `actor` IN(1,2)
а мне нужно, что бы он выводил только те фильмы, в которых играют роль оба актера???
amf1k Отправлено: 17 Мая, 2015 - 16:06:41 • Тема: Стоит ли принимать $_GET параметр в функцию? • Форум: Вопросы новичков

Ответов: 6
Просмотров: 269
esterio пишет:
Второй

поставим другую задачу!
есть 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)
выборку делаю в таблицы роли (получаю количество айди актеров и количество общих фильмов по каждому актеру), а выводить информацию об актерах мне уже надо с таблицы актеры, как с этим быть???
amf1k Отправлено: 17 Мая, 2015 - 13:26:10 • Тема: Стоит ли принимать $_GET параметр в функцию? • Форум: Вопросы новичков

Ответов: 6
Просмотров: 269
esterio пишет:
Второй

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

и нужно вывести всю инфу по этим айдишникам и добавить каждому айдишнику поле => 'что-то' при выводе! как это реализовать? 2-й вариант уже не сработает(
amf1k Отправлено: 16 Мая, 2015 - 23:17:46 • Тема: Стоит ли принимать $_GET параметр в функцию? • Форум: Вопросы новичков

Ответов: 6
Просмотров: 269
DelphinPRO пишет:
amf1k первый вариант - правильный. Подробности OrmaJever рассказал.

а если мне "просто" нужно вывести инфу с БД по id ???
(Добавление)
OrmaJever пишет:
Функция должна быть независима, она должна принимать какой-то параметр (число или строку) и ничего не знать откуда это значение берётся. Если же она будет жёстко привязана к ГЕТ параметру с определённым ключём то это не будет хорошо, потому что на одной странице id берётся из $_GET['id'], на другой из $_POST['id'], а на трейтей из бд $row['id'].


с этим все ясно, спасибо)
2-й вопрос:
пришел массив айдишников с формы

вариант первый:
есть функция выборки инфы по id
PHP:
скопировать код в буфер обмена
  1. function getResult($id){
  2.         //Функция возвращает инфу с БД (чего то) по id
  3. }

нужно в цикле вывести информацию по айдишниках с формы
PHP:
скопировать код в буфер обмена
  1. foreach($arr as $value){
  2.         $result = getResult($value);
  3.         echo $result['поле чего то'];
  4. }

вариант второй:
есть функция выборки инфы
PHP:
скопировать код в буфер обмена
  1. function getResult($array){
  2.         //преобразование массива айдишников в строку
  3.         $list_id = implode(',', $array);
  4.         //запросс
  5.         $query = 'SELECT `все поля` FROM `таблица` WHERE `id` IN("$list_id")';
  6.         //Возвращаем массив по выбранным id
  7. }

и простой вывод
PHP:
скопировать код в буфер обмена
  1. $arr = getResult($arr);
  2. foreach($arr as $value){
  3.         echo $value['поле чего то'];
  4. }

какой вариант будет правильней и быстрее???
amf1k Отправлено: 16 Мая, 2015 - 22:45:15 • Тема: Стоит ли принимать $_GET параметр в функцию? • Форум: Вопросы новичков

Ответов: 6
Просмотров: 269
Стоит ли принимать $_GET параметр в функцию? например принимаем $_GET['id']

PHP:
скопировать код в буфер обмена
  1. function getResult($id){
  2. //что то делаем с  $id
  3. }
  4. print_r (getResult($_GET['id']));
  5.  
  6. function getResult(){
  7. $id = $_GET['id'];
  8. //что то делаем с  $id
  9. }
  10. print_r (getResult());


какая здесь разница???
amf1k Отправлено: 25 Апреля, 2015 - 02:39:16 • Тема: Помогите написать запрос • Форум: Вопросы новичков

Ответов: 12
Просмотров: 808
exlant пишет:
я не говорю, что она не понятная, я говорю, что она плохая!
Правильней было бы сделать как то так:
1-я таблица - kino: id, title
2-я таблица - actor: id, name
3-я таблиц - roli: id, kino_id, actor_id

а у меня как? вы написали такую же структуру таблиц как и у меня, где разница???
разница в том, связывать проще будет название фильма и имя актера, чем id фильма и id актера, ведь для этого не нужно искать под каким id фильм и под каким id актер, ведь я прав?)

exlant пишет:
А у вас все в третьей таблице, есть и название фильмов, и актеров, и вообще не понятно, зачем первая и вторая тогда таблицы...

1-я таблица - там хранится вся инфа о фильме
2-я таблица - там хранится все инфа об актере
3-я таблица будет связывать фильм и актеров, которые играют роль в этом фильме

Вот мой вариант запроса:
PHP:
скопировать код в буфер обмена
  1.  
  2. SELECT `movie` FROM `roles` WHERE `movie` IN(
  3.     SELECT `movie` FROM `roles` WHERE `actor`="Вася"
  4. ) AND `actor`="Петя"
  5.  
amf1k Отправлено: 24 Апреля, 2015 - 22:20:36 • Тема: Помогите написать запрос • Форум: Вопросы новичков

Ответов: 12
Просмотров: 808
[quote=exlant][/quote]
да структура самая понятная какая может быть)
ваш запрос выводить все фильмы васи и пети в дублированном виде по несколько раз, так что он не верный!
amf1k Отправлено: 24 Апреля, 2015 - 20:19:51 • Тема: Помогите написать запрос • Форум: Вопросы новичков

Ответов: 12
Просмотров: 808
[quote=tato][/quote]

Пример:

id - 1
movie - Злодей
actor - Даша

id - 2
movie - Злодей
actor - Вася

id - 3
movie - Злодей (Это уже другой фильм "Злодей")
actor - Вася

id - 4
movie - Злодей (Это уже другой фильм "Злодей")
actor - Катя

id - 5
movie - Санта Барбара
actor - Даша

id - 6
movie - Санта Барбара
actor - Вася

id - 7
movie - Злодей
actor - Петя

id - 8
movie - Герой
actor - Петя

id - 9
movie - Герой
actor - Вася

итог 4 фильма:
Фильм "Злодей": актеры - Даша,Вася,Петя
Фильм "Злодей другой фильм": актеры - Вася,Катя
Фильм "Санта Барбара": актеры - Даша,Вася
Фильм "Герой": актеры - Петя,Вася

например нужно вытащить фильмы Васи и Пети, где они играли роль вмете
получаем 2 фильма: "Злодей","Герой"
amf1k Отправлено: 24 Апреля, 2015 - 18:05:09 • Тема: Помогите написать запрос • Форум: Вопросы новичков

Ответов: 12
Просмотров: 808
tato пишет:
LIME пишет:

С чего это? Как Я понял записи в таком виде
Фильм1 Вася
Фильм2 Вася
Фильм1 Петя

И как запрос опа выберет Фильм1?
(Добавление)
И вообще как поле может иметь сразу два значения? Запрос опа в принципе не корректен


Вот 3 таблицы:
1-я таблица фильмы
id,title (название фильма)
2-я таблица актеры
id,name (имя актера)
3-я таблица роли (то есть, фильм и актеры. которые играют роль в этом фильме)
title (название фильма), actor (актер, который играет роль в этом фильме)
Вопрос тот же?
amf1k Отправлено: 22 Апреля, 2015 - 09:39:34 • Тема: Помогите написать запрос • Форум: Вопросы новичков

Ответов: 12
Просмотров: 808
есть таблица в БД "kino"
2 поля: название фильма "title" и актер играющий роль "actor"
нужно выбрать все фильмы где играют роль определенные 2 актера вместе
вот мой запрос, он конечно не работает(
SELECT `title` FROM `kino` WHERE `actor`="Вася" AND `actor`="Петя"
помогите исправить запрос?
amf1k Отправлено: 22 Апреля, 2015 - 08:34:27 • Тема: Функция и параметры • Форум: Вопросы новичков

Ответов: 3
Просмотров: 161
Мелкий пишет:
Да, не имеет права на жизнь.
Вы пытаетесь в один метод засунуть два не связанных между собой.

это же для примера, код рабочий!
amf1k Отправлено: 22 Апреля, 2015 - 06:19:26 • Тема: Функция и параметры • Форум: Вопросы новичков

Ответов: 3
Просмотров: 161
Есть 2 страницы: например - kino.php и actor.php
Есть БД, в ней 2 таблицы - фильмы и актеры
Есть функция вывода информации с БД
PHP:
скопировать код в буфер обмена
  1.  
  2. function getInfo($kino, $actor){
  3.     //Если 1-й параметр равен NULL
  4.     if(empty($kino)){
  5.         //Делаем запрос на выборку всех актеров
  6.         $query = 'SELECT * FROM `actor`';
  7.     }
  8.     //Если 2-й параметр равен NULL
  9.     else{
  10.         //Делаем запрос на выборку всех фильмов
  11.         $query = 'SELECT * FROM `kino`';
  12.     }
  13.     $result = mysql_query($query);
  14.     $array = array();
  15.     while($row = mysql_fetch_assoc($result)){
  16.         $array[] = $row;
  17.     }
  18.     //Возвращаем массив актеров, или массив фильмов
  19.     return $array;
  20. }
  21.  

Если страница kino.php, то выводим информацию по фильмах

Если страница actor.php, то выводим информацию по актерах

Вопрос: Можно ли так применять параметры к функции (NULL), если нет, то почему???
Если честно, то код работает, но что то мне подсказывает, что этот код не имеет права на жизнь?
amf1k Отправлено: 20 Апреля, 2015 - 21:43:03 • Тема: Преобразовать массив в строку • Форум: Вопросы новичков

Ответов: 30
Просмотров: 1246
exlant пишет:
версия php у вас низкая...

вот так попробуйте $result = array();

или вообще удалите эту строку, она там необязательна...


спасибо, очень помогли в эту трудную минуту) а то я тут начал писать новый велосипед:
PHP:
скопировать код в буфер обмена
  1.  
  2. $str = '';
  3. foreach ($array as $value) {
  4.     if ( is_array($value) && isset($value['title']) ) {
  5.         $str .= '","'.$value['title'];
  6.     }
  7. }
  8. echo substr($str,3);
  9.  

Ваш код будет наверное самый оптимальный!)
amf1k Отправлено: 20 Апреля, 2015 - 21:26:16 • Тема: Преобразовать массив в строку • Форум: Вопросы новичков

Ответов: 30
Просмотров: 1246
DelphinPRO пишет:
PHP:
скопировать код в буфер обмена
  1. $array = array(
  2.     0=>array('title'=>'Название'),
  3.     1=>array('title'=>'Название 2')
  4. );
  5. $result = [];
  6. foreach ($array as $item) {
  7.   $result[] = $item['title'];
  8. }
  9.  
  10. $string = join(',', $result);


Parse error: syntax error, unexpected
ругается на 5 строчку(
amf1k Отправлено: 20 Апреля, 2015 - 19:56:20 • Тема: Преобразовать массив в строку • Форум: Вопросы новичков

Ответов: 30
Просмотров: 1246
Есть массив (это для примера - количество полей "title" не известно):
PHP:
скопировать код в буфер обмена
  1.  
  2. $array = array(
  3.     0=>array('title'=>'Название'),
  4.     1=>array('title'=>'Название 2')
  5. );
  6.  

нужно его разбить на строку в виде:
PHP:
скопировать код в буфер обмена
  1.  
  2. $str = 'Название","Название 2';
  3.  

Делаю это для того, что бы выбирать в БД SQL определенные название полей "title"
PHP:
скопировать код в буфер обмена
  1.  
  2. $query = 'SELECT `title` FROM `таблица` WHERE `title` IN ("'.$str.'")';
  3.  

Может есть ещё какие то идеи по выборке если есть массив $array???

Страниц (8): « 1 [2] 3 4 5 6 7 8 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB