Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как сделать такое? MySQL 
:(
    Опции темы
ida
  Дата 3.6.2004, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


замужем
****


Профиль
Группа: Завсегдатай
Сообщений: 2277
Регистрация: 14.5.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 58



И можно ли сделать вообще.
Значит есть три таблицы, первая со второй связаны многие-ко-многим через третью (то есть третья содержит пары значений, каждое из которых неуникально в пределах таблицы).

таблица1
id1, name1

таблица2
id2, name2

таблица3
id1a, id2a

нужно одним запросом найти все id1a равные переменной, найти все пары id1a, id2a где первый стролбец равен этой переменной, по второму значению определить все name2 и вывести их все в одну строку. Можно ли сделать такое в MySQL и каким образом?
PM WWW   Вверх
ida
Дата 3.6.2004, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


замужем
****


Профиль
Группа: Завсегдатай
Сообщений: 2277
Регистрация: 14.5.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 58



Получилось!!!! biggrin.gif
PM WWW   Вверх
boevik
Дата 3.6.2004, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 2
Всего: 35



ida , как сделала? Поделись, пожалуйста.

Это сообщение отредактировал(а) boevik - 3.6.2004, 21:13


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
ida
Дата 3.6.2004, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


замужем
****


Профиль
Группа: Завсегдатай
Сообщений: 2277
Регистрация: 14.5.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 58



Вот так:

Код
$query = "SELECT links2.act_id, links2.film_id, films.id_film, films.name_film, actors.id_act, actors.name_act
          FROM links2, films, actors
          WHERE links2.film_id = $u AND links2.film_id = films.id_film AND links2.act_id = actors.id_act";

$result = MYSQL_QUERY($query);
$number = MYSQL_NUMROWS($result);

$i = 0;

IF ($number == 0) {
  PRINT "<TD>В ролях</TD><TD>Нет данных</TD>";
}

ELSEIF ($number > 0) {
  PRINT "<TD>В ролях</TD><TD>";
  WHILE ($i < $number) {
    $act  = mysql_result($result,$i,"name_act");
    PRINT "$act <BR>";
    $i++;
  }

PRINT "</TD></TR></TABLE>";

}


Все чудненько выводится smile.gif А если убрать перевод строки после $act то как раз все значения в одну строку и выведутся (мне было достаточно столбика)

Это сообщение отредактировал(а) ida - 3.6.2004, 21:44
PM WWW   Вверх
boevik
Дата 3.6.2004, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 2
Всего: 35



ida , спасибо.
Но это решение при помощи кода программы.
А возможно ли сделать поставленную задачу в самой базе, при помощи SQL statement?


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
ida
Дата 10.6.2004, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


замужем
****


Профиль
Группа: Завсегдатай
Сообщений: 2277
Регистрация: 14.5.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 58



Я вообще-то с SQL работаю первый раз, поэтому не знаю, что там и как можно сделать. Но если задача решена, вряд ли кого-то сильно заинтересует, каким выражением ты это сделал (пользователей точно нет smile.gif). А для общего развития - будет время заняться этим позже.
PM WWW   Вверх
Akina
Дата 10.6.2004, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Вывести в одну строку можно только программно. А получить данные - одним запросом.
ida
теперь переделай свой код как положено - вместо if(){... i++;} сделай foreach(){}


Это сообщение отредактировал(а) Akina - 10.6.2004, 09:08


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ida
Дата 10.6.2004, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


замужем
****


Профиль
Группа: Завсегдатай
Сообщений: 2277
Регистрация: 14.5.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 58



А у меня сколькью запросами?..... По-моему SELECT там один раз только и встречается. И почему foreach?... Разве в PHP есть такое слово?
PM WWW   Вверх
Akina
Дата 11.6.2004, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



ida
Против количества запросов в твоем коде я ничего не имею - это ответ boevik-у.

Цитата
почему foreach?... Разве в PHP есть такое слово?

http://ru2.php.net/get/php_manual_ru.chm/from/a/mirror
Цитата
foreach
PHP 4 (not PHP 3) includes a foreach construct, much like Perl and some other languages. This simply gives an easy way to iterate over arrays. foreach works only on arrays, and will issue an error when you try to use it on a variable with a different data type or an uninitialized variable. There are two syntaxes; the second is a minor but useful extension of the first:


foreach (array_expression as $value) statement
foreach (array_expression as $key => $value) statement




The first form loops over the array given by array_expression. On each loop, the value of the current element is assigned to $value and the internal array pointer is advanced by one (so on the next loop, you'll be looking at the next element).

The second form does the same thing, except that the current element's key will be assigned to the variable $key on each loop.


Замечание: When foreach first starts executing, the internal array pointer is automatically reset to the first element of the array. This means that you do not need to call reset() before a foreach loop.



Замечание: Also note that foreach operates on a copy of the specified array and not the array itself. Therefore, the array pointer is not modified as with the each() construct, and changes to the array element returned are not reflected in the original array. However, the internal pointer of the original array is advanced with the processing of the array. Assuming the foreach loop runs to completion, the array's internal pointer will be at the end of the array.



Замечание: foreach does not support the ability to suppress error messages using '@'.


You may have noticed that the following are functionally identical:


<?php
$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
    echo "Value: $value<br>\n";
}

foreach ($arr as $value) {
    echo "Value: $value<br>\n";
}
?>



The following are also functionally identical:

<?php
reset ($arr);
while (list($key, $value) = each ($arr)) {
    echo "Key: $key; Value: $value<br>\n";
}

foreach ($arr as $key => $value) {
    echo "Key: $key; Value: $value<br>\n";
}
?>




Some more examples to demonstrate usages:


<?php
/* foreach example 1: value only */

$a = array (1, 2, 3, 17);

foreach ($a as $v) {
  print "Current value of \$a: $v.\n";
}

/* foreach example 2: value (with key printed for illustration) */

$a = array (1, 2, 3, 17);

$i = 0; /* for illustrative purposes only */

foreach ($a as $v) {
    print "\$a[$i] => $v.\n";
    $i++;
}

/* foreach example 3: key and value */

$a = array (
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => 17
);

foreach ($a as $k => $v) {
    print "\$a[$k] => $v.\n";
}

/* foreach example 4: multi-dimensional arrays */

$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach ($a as $v1) {
    foreach ($v1 as $v2) {
        print "$v2\n";
    }
}

/* foreach example 5: dynamic arrays */

foreach (array(1, 2, 3, 4, 5) as $v) {
    print "$v\n";
}
?>





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.