Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбрать из одной таблицы, а значения другой 
:(
    Опции темы
Igor_CH
Дата 29.8.2006, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

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



Что то я запутался, подскажите пожалуйста как сделать выборку.

Первая таблица

ID  |  Nomer  |  k  |  …  | ...
1          0           1      …
2          1           1      …
3          1           1      …
4          2           1      …
………………………..

Вторая таблица
ID_R  |   name  |    kp1  |   kp2  |   ….
0              
1            имя_1        1          0    
2            имя_2        0          0
3            имя_3        1          1
……………………….
около 1000 имен!

ID_R это NOMER из первой таблицы
+ (может это и не надо)
Если k = 1 , то второй таблице принадлежат имена с kp1 = 1
Если k = 2 , то второй таблице принадлежат имена с kp2 = 1


Делаю выборку по первой таблице
получаю:
0
1
1
2
и т.д.

Как сделать чтоб вместо цифр подставлялись имена со второй таблицы?


Это сообщение отредактировал(а) Igor_CH - 29.8.2006, 16:04
PM MAIL   Вверх
ewolf
Дата 29.8.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

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



Ну так например:

Код

SELECT table1.* table2.name FROM table1, table2 WHERE table2.ID_R = table1.ID AND ( (table1.k = 1 AND table2.kp1 = 1) OR (table1.k=2 AND table2.kp2 = 1) )

PM MAIL ICQ   Вверх
Igor_CH
Дата 29.8.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

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



а можно не в один запрос, в первой таблицы не только K но и много других подобных
PM MAIL   Вверх
ewolf
Дата 29.8.2006, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

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



Можно. Например

Код

<?php
   mysql_connect("localhost", "mysql_user", "mysql_password") or
       die("Could not connect: " . mysql_error());
   mysql_select_db("mydb");

   $result = mysql_query("SELECT * FROM table1");

   while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
       $result1 = mysql_query("SELECT * FROM table2 WHERE kp1 = '{$row['K']}'"); 
       while( $row1 =  mysql_fetch_array($result, MYSQL_ASSOC)) {
          // Какие-нить действия
       }

       mysql_free_result($result1);
       $result1 = mysql_query("SELECT * FROM table2 WHERE kp2 = '{$row['K']}'"); 
       while( $row1 =  mysql_fetch_array($result, MYSQL_ASSOC)) {
          // Какие-нить действия
       }
       mysql_free_result($result1);
   }

   mysql_free_result($result);
?>


Ну и т.д. Но одним запросом много быстрее
PM MAIL ICQ   Вверх
Igor_CH
Дата 29.8.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

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



Спасибо! Буду пробывать...
PM MAIL   Вверх
Igor_CH
Дата 29.8.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

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



Первый пример неполучится.

вот полностью первая таблица
id_R | para | kurs | gruppa | den | predmet | prepod | predmet_kr | prepod_kr

вторая таблица
id_Rpred | name_Rpred | kp1 | kp2 | kp3 | kp4 | kp5 

третья таблица
id_Rprep | name_Rprep | k1 | k2 | k3 | k4 | k5  

Как все это сходиться:
первая таблица только цифры
вторая и третья таблицы: id_... - цыфра, name_... - название, к... и kp... - цифры 0 или 1

predmet и predmet_kr - равны id_Rpred
prepod и prepod_kr - равны id_Rprep 
kurs =1 тогда k1=1 и kp1=1  (kurs=2 тогда k2=1 и kp2=1 и т.д.) - но это наверно и не важно

Мне нужна выборка например по: kurs=1 и gruppa=1 - получим 25 строк (5 дней по 5 пар), вместо цыфр имена из таблицы 2 и таблицы 3


Надеюсь понятна структура.
PM MAIL   Вверх
cyberface
Дата 30.8.2006, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 6.6.2006

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



Помоему тебе нужно просто.
Код

SELECT table1.* table2.name
FROM table1 JOIN table2 ON table2.ID_R = table1.ID


PM MAIL   Вверх
Igor_CH
Дата 30.8.2006, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

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



не получается так 
во первых 3 таблицы
во вторых
table2.id_Rpred = table1.predmet
table2.id_Rpred = table1.predmet_kr
table3.id_Rprep = table1.prepod
table3.id_Rprep = table1.prepod_kr


Делаю так
Код

$sql = "SELECT id_R,
                 predmet,
                 prepod,
                 den,
        predmet_kr,
        prepod_kr
    FROM raspis 
    WHERE gruppa=1 AND kurs=1 ORDER by id_R DESC";
$result = mysql_query($sql,$con) or die (mysql_error()."<br>".$sql);
while ($row = @ mysql_fetch_array($result)) {

$predmet = $row_n['predmet'];

//А ДАЛЕЕ ВТОРОЙ ЗАПРОС, ВНУТРИ 
$sql_p = "SELECT id_Rpred, name_Rpred 
    FROM raspis_predmet
    WHERE id_Rpred = $predmet";
$result_p = mysql_query($sql_p,$con) or die (mysql_error()."<br>".$sql_p);    
while ($row_p = @ mysql_fetch_array($result_p)) 

ТУТ ВЫВОЖУ что мне надо

}
}


Т.е. получаю запрос, а внутри еще 4 запроса (сверху показал 1) и того на 25 строк 100 запросов!!!  
Это же не правильно?
PM MAIL   Вверх
Igor_CH
Дата 30.8.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

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



что правда нет других выходов кроме 100 запросов?

Мне еще надо если predmet != 0, а predmet_kr=0 то выводить только predmet

Добавлено @ 15:25 
может как то через массив, вот только как? smile
PM MAIL   Вверх
cyberface
Дата 31.8.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 6.6.2006

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



>> не получается так 
Ну ты хотя бы скажи почему не получается

Попробуй так:

Код

SELECT id_Rpred, name_Rpred,
FROM raspis LEFT JOIN raspis_predmet ON raspis.predmet = raspis_predmet.id_Rpred
WHERE gruppa=1 AND kurs=1 ORDER by id_R DESC



И вообще, я конечно понимаю, что это дело вкуса, но я запутался в названиях ты назови все как-нибудь по проще и что бы понятно было

PM MAIL   Вверх
Igor_CH
Дата 1.9.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

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



Спасибо получилось.
Код

$sql = "SELECT id_Rpred, name_Rpred, id_Rprep, name_Rprep, predmet, prepod, predmet_kr, prepod_kr
        FROM raspis 
        LEFT JOIN raspis_predmet ON raspis.predmet = raspis_predmet.id_Rpred
        LEFT JOIN raspis_prepod ON raspis.prepod = raspis_prepod.id_Rprep
        WHERE gruppa=1 AND kurs=1 ORDER by id_R DESC";


Но это только для двух ячеек:
raspis.predmet = raspis_predmet.id_Rpred
raspis.prepod = raspis_prepod.id_Rprep

А как сделать еще и для:
raspis.predmet_kr = raspis_predmet.id_Rpred
raspis.prepod_kr = raspis_prepod.id_Rprep


PM MAIL   Вверх
cyberface
Дата 2.9.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 6.6.2006

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



Цитата(Igor_CH @  1.9.2006,  10:22 Найти цитируемый пост)
Спасибо получилось.

Спасибо на репутации не отображается  smile 

Надо так:
Код

SELECT id_Rpred, name_Rpred, id_Rprep, name_Rprep, predmet, prepod, predmet_kr, prepod_kr
FROM raspis 
LEFT JOIN raspis_predmet ON raspis.predmet = raspis_predmet.id_Rpred
 AND raspis.predmet_kr = raspis_predmet.id_Rpred
LEFT JOIN raspis_prepod ON raspis.prepod = raspis_prepod.id_Rprep
 AND raspis.prepod = raspis_prepod.id_Rprep
WHERE gruppa=1 AND kurs=1 ORDER by id_R DESC


Либо так:
Код

SELECT id_Rpred, name_Rpred, id_Rprep, name_Rprep, predmet, prepod, predmet_kr, prepod_kr
FROM raspis 
LEFT JOIN raspis_predmet ON raspis.predmet = raspis_predmet.id_Rpred
LEFT JOIN raspis_prepod ON raspis.prepod = raspis_prepod.id_Rprep
WHERE gruppa=1 AND kurs=1
AND raspis.predmet_kr = raspis_predmet.id_Rpred
AND raspis.prepod = raspis_prepod.id_Rprep
ORDER by id_R DESC


Последний вариант оптимальнее, так как, на сколько я помню, в джоинах лучше не указывать никаких дополнительных условий объединения, если их можно вынести в WHERE


PM MAIL   Вверх
Igor_CH
Дата 11.9.2006, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

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



Долго не мог ответить.
Коды выше у меня не хотят работать, может не так вывожу данные.
Как сделать вывод результатов?
Вот код который представлен выше:
Код

$sql = "SELECT id_Rpred, name_Rpred, id_Rprep, name_Rprep, predmet, prepod, predmet_kr, prepod_kr
        FROM raspis 
        LEFT JOIN raspis_predmet ON raspis.predmet = raspis_predmet.id_Rpred
        LEFT JOIN raspis_prepod ON raspis.prepod = raspis_prepod.id_Rprep
    WHERE gruppa=1 AND kurs=1
        AND raspis.predmet_kr = raspis_predmet.id_Rpred
        AND raspis.prepod_kr = raspis_prepod.id_Rprep
        ORDER by id_R DESC";

$result = mysql_query($sql,$con) or die (mysql_error()."<br>".$sql);
$i=0;
while ($row = @ mysql_fetch_array($result)) {
$i++;
?>
<table><tr><td><?=$i?></td>
<td>ячейка prepod</td><td>ячейка predmet</td>
<td>ячейка prepod_kr</td><td>ячейка predmet_kr</td>

</tr></table>
<?php
}
?>



PM MAIL   Вверх
-=Ustas=-
Дата 11.9.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

Репутация: 17
Всего: 69



Цитата(Igor_CH @  11.9.2006,  09:39 Найти цитируемый пост)
Как сделать вывод результатов?


Непонял, у тебя не работает запрос, или ты с результатом не можешь работать?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Igor_CH
Дата 11.9.2006, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

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



Я не понял как вывести результат из такого запроса.
До того как было два LEFT JOINа было понятно:
Код

<?php
$name_Rpred = $row['name_Rpred'];
$name_Rprep = $row['name_Rprep'];
?>
<table><tr><td><?=$i?></td><td><?=$name_Rpred?></td><td><?=$name_Rprep?></td></tr></table>


а теперь 4 как вывести 4 ячейки?
Код

<td>ячейка prepod</td><td>ячейка predmet</td>
<td>ячейка prepod_kr</td><td>ячейка predmet_kr</td>


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


 




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


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

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