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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объединить 2 запроса в 1 через JOIN + WHERE 
V
    Опции темы
JEEN
Дата 27.7.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

<?php
$sql = mysql_query('SELECT sp_id, sp_name FROM specialty ORDER BY sp_id') or die(mysql_error());
while ( $row = mysql_fetch_assoc($sql) ):
?>
<tr>
    <td><?php echo $row['sp_name']; ?></td>
    <td>
    <?php
        $sql_gr = mysql_query("SELECT count(*) as count FROM groups WHERE gr_specialty = {$row['sp_id']}") or die(mysql_error());
        $count = mysql_fetch_row($sql_gr);
        if ($count[0] == 0) {
            echo "Удалить"
        } else { 
            echo "Нельзя удалять"
        }
    ?>
    </td>
</tr>
<?php endwhile; ?>

смысл такой, есть таблица специальностей и групп. Может быть несколько групп с одной специальностью. Удалить специальность можно только в том случае если нет групп с этой специальностью.

specialty
sp_id | sp_name

groups
gr_id | gr_name | gr_specialty

Это сообщение отредактировал(а) JEEN - 27.7.2010, 13:34
PM MAIL   Вверх
letsgo
Дата 27.7.2010, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



SELECT t1.sp_id, t1.sp_name, count(t2.gr_id) as count
FROM t1
LEFT JOIN t2
ON t2.gr_specialty = t1.sp_id
GROUP BY t1.sp_id

Дальше включаете while/
if ($row['count'] == 0) {
...
}

Это сообщение отредактировал(а) letsgo - 27.7.2010, 13:41
PM MAIL   Вверх
JEEN
Дата 27.7.2010, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо!


столкнулся еще с одной проблемой..

student
id  |  name      |  group_id
++++++++++++++++++
1   |  Женя      |    12
2   |  Ваня       |    10
3   |  Миша      |    12

group
 id   | name     | specialty_id
++++++++++++++++++++
10   | 323гр.   |   1
11   | 434гр.   |   2
12   | 232гр.   |   2

specialty
id    | name 
+++++++++
1     | Информатика
2     | Математика

------------------------------
я пытаюсь сделать выборку, т.е. выбираю нужную мне специальность, скрипт выводит студентов которые учатся на этой специальности, но как видите в таблице студентов есть только поле с id группы.
Пример: через форму получаю id специальности (например 2), узнаю у этой специальности группы (в данном случае группы с id 11 и 12) и ищу студентов которые учатся в этой группе (Женя и Миша).
как это можно сделать?

вот так вроде работает...
Код

LEFT JOIN specialty ON groups.gr_specialty = specialty.sp_id WHERE specialty.sp_id = {$specialty}


Вариант 1: не правильно считает $row_count, в данном случае считает количество групп, удовлетворяющих условию, а не студентов
Код

$where = "LEFT JOIN (specialty) ON (groups.gr_specialty = specialty.sp_id) WHERE groups.gr_id = {$specialty}";
$sql_count = mysql_query("SELECT * FROM (project, groups) {$where} GROUP BY groups.gr_id") or die('Ошибка');
$row_count = mysql_num_rows($sql_count); // кол-во записей в таблице

Вариант 2:  Так считает сколько всего студентов, и не обращает внимания на условие...
Код

$sql_count = mysql_query("SELECT * FROM (project, groups) {$where}") or die('Ошибка');

Вариант 3: Выводит ошибку Unknown column 'groups.gr_specialty' in 'on clause'
Код

$sql_count = mysql_query("SELECT * FROM project {$where}") or die('Ошибка');

все 3 варианта содержат ошибку...

Это сообщение отредактировал(а) JEEN - 27.7.2010, 22:31
PM MAIL   Вверх
ZneP
Дата 1.8.2010, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Выборка студентов, названия групп и названия специальностей по id специальности:

SELECT st.name, g.name, sp.name
FROM students st
LEFT JOIN group g ON g.group_id = st.group_id
LEFT JOIN specialty sp ON sp.id = g.specialty_id
WHERE sp.id = {$specialty}
GROUP BY st.name, g.name, sp.name
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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