SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.03.2011 16:27:00

kpik
Участник
Зарегистрирован: 07.03.2011
Сообщений: 7

Задание: Создание БД и вывод данных

Здравствуйте, подскажите как правильно сделать задание:

Цель: Вывести информацию про детали, поставки которых были совершены для указанного изделия всеми поставщиками
Увеличить рейтинг поставщика, которые выполнили больший суммарный объем поставок, на указанную величину.

пример:

Структура базы данных:
Postav- таблица поставщиков

id – идентификатор
name – Название фирмы (компании)
city - город
director  - Ф.И.О директора
address  - адрес поставщика
rating – рейтинг поставщика

SQL-запрос

CREATE TABLE `lab10`.`postav` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 35 ) NOT NULL ,
`city` VARCHAR( 30 ) NOT NULL ,
`director` VARCHAR( 45 ) NOT NULL ,
`address` VARCHAR( 255 ) NOT NULL ,
`rating` INT(3) NOT NULL
) ENGINE = InnoDB;


Detal-  Детали
id – идентификатор
date – дата
supplier  - поставщик
name –название детали
sum  - количество

SQL-запрос

CREATE TABLE `lab10`.`detal` (
`id` INT( 3 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`date` DATE NOT NULL ,
`supplier` VARCHAR( 35 ) NOT NULL ,
`name` VARCHAR( 35 ) NOT NULL ,
`sum` INT( 3 ) NOT NULL
) ENGINE = InnoDB;


Izdel- Изделия
id – идентификатор
date – дата
name –название детали
sum  - количество

SQL-запрос

CREATE TABLE `lab10`.`izdel` (
`id` INT( 3 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`date` DATE NOT NULL ,
`name` VARCHAR( 45 ) NOT NULL ,
`sum` INT( 3 ) NOT NULL
) ENGINE = InnoDB;


Postavki-  Поставки
id – идентификатор
date – дата
supplier –поставщик
product – продукт поставки
kol - количество

SQL-запрос

CREATE TABLE `lab10`.`postavki` (
`id` INT( 3 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`date` INT NOT NULL ,
`supplier` VARCHAR( 35 ) NOT NULL ,
`product` VARCHAR( 35 ) NOT NULL ,
`kol` INT( 3 ) NOT NULL
) ENGINE = InnoDB;



2. Структура директорий:
config – в этой директории будут хранится настройки необходимые для работы скрипта.
    db.php – файл для подключения к базе данных.

В корневой директории хранятся файлы:
index.php
postav.php – для работы с поставщиками.
postav_city.php – поиск поставщиков по городам
rating.php – рейтинг поставщиков.

3 Соединение с базой данных (db.php)


<?php
$server = "localhost";
$username = "root";
$password = "";
$database_name = "lab10";

$connect = mysql_connect($server, $username, $password);
// mysql_connect() устанавливает соединение с сервером MySQL
// $server  - определяет сервер для подключения чаще всего это localhost
// $username – имя пользователя для подключения
// $password – пароль
// $database_name – имя базы данных

if ($connect == true) {
    mysql_select_db($database_name) or die(mysql_error());
}
?>
 


Проверка соединения

if ($connect == true) {
    mysql_select_db($database_name) or die(mysql_error());
    //если выбрать базу не удалось выполнится функция mysql_error();
mysql_select_db() выбирает для работы указанную базу данных на сервере, на который ссылается переданный указатель. Если параметр указателя опущен, используется последнее открытое соединение. Если нет ни одного открытого соединения, функция попытается соединиться с сервером аналогично функции mysql_connect(), вызванной без параметров.

}


index.php



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Главная страница</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
<?php
require_once '/config/db.php';
echo"<a href=\"postav.php\">Информация о поставщиках</a>";
echo"<a href=\"rating.php\">Рейтинг поставшиков</a>";
?>
</body>
</html>



require_once '/config/db.php';


Функция require_once вызывает наш файл с настройками для работы с базой данных:


3. Выводим информацию о поставщиках, поставивших детали для изделий из указанного города.
Для того чтобы организовать поиск нужно создать форму в файле postav.php


<form action="postav_city.php" method="POST">
          <input type="text" name="city">
          <input type="submit" name="send" value="Поиск">
      </form>




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Поставщики</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
      <form action="postav_city.php" method="POST">
          <input type="text" name="city">
          <input type="submit" name="send" value="Поиск">
      </form>
<?php
//подключаем файл настроек БД
require_once '/config/db.php';
//В переменную result помещаем результат запроса
$result = mysql_query("SELECT * FROM postav") or die(mysql_error());
while ($row = mysql_fetch_array($result)){
    echo"Имя поставщика: ".$row['name']."<br>";
    echo"Город: ".$row['city']."<br>";
    echo"Адрес: ".$row['address']."<br>";
    echo"Рейтинг: ".$row['rating']."<br>";
    echo"<hr>";
}
 result.
mysql_free_result($result);
?>
</body>
</html>


<?php
require_once '/config/db.php';

//получаем переменную
$city = $_POST['city'];

//проверка на существование и заполнение поля
if(!isset($city) || empty ($city)) {
    echo"Вы не ввели название города!";
    exit ();
}else {
//Если название города введено,тогда выполняем запрос где значение поля = $city
$result = mysql_query("SELECT * FROM postav WHERE city = '$city'") or die(mysql_error());
while ($row = mysql_fetch_array($result)){

    echo"Код поставщика: ".$row['id']."<br>";
    echo"Имя поставщика: ".$row['name']."<br>";
    echo"Город: ".$row['city']."<br>";
    echo"Адрес: ".$row['address']."<br>";
    echo"Рейтинг: ".$row['rating']."<br>";
    echo"<hr>";
}
mysql_free_result($result);
}
?>



4.Рейтинг поставщиков (rating.php)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Поставщики</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
      <form action="rating.php" method="POST">
          Введите наименование детали:<br>
          <input type="text" name="product"><br>
          Рейтинг:<br>
          <input type="text" name="rating"><br>
          <p><input type="submit" name="send" value="Выполнить"></p>
      </form>
<?php
require_once '/config/db.php';
//если кнопка нажата
if(isset($_POST['send'])) {
    //получаем переменные
    $product = $_POST['product'];
    $rating = $_POST['rating'];
    //запрос на выборку
    $result = mysql_query("SELECT id,supplier,MAX(kol) as kol FROM postavki WHERE product = '$product' ") or die(mysql_error());
   
    while ($row = mysql_fetch_array($result)) {
       
        echo "Код паставщика: ".$row['id']."<br>";
        echo "Поставщик: ".$row['supplier']."<br>";
        echo "Количество: ".$row['kol'];

        $name = $row['supplier'] ;
        //Обновиляем значение поля “rating”
        $r = mysql_query("UPDATE postav SET rating = '$rating' WHERE name = '$name' ") or die(mysql_error());
    }


}

 ?>
  </body>
</html>



При работе с оператором SELECT вам доступны несколько очень полезных внутренних функций MySQL, вычисляющих колличество элементов (COUNT), сумму элементов (SUM), максимальное и минимальное значения (MAX и MIN), а также среднее значение (AVG).

Обновление записей. Оператор UPDATE
UPDATE Имя_таблицы
SET Поле1 = Значение1, ... , ПолеN = ЗначениеN
[WHERE Условие];
Если не задано условие WHERE, будет модифицирована вся таблица, а это может повлечь за собой непредсказуемые последствия, поскольку для всех записей будут установлены одинаковые значения полей, поэтому всегда указывайте условие WHERE.


Прикрепленные файлы:
Attachment Icon пример.doc, Размер: 169,984 байт, Скачано: 808

Неактивен

 

#2 08.03.2011 01:34:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Задание: Создание БД и вывод данных

Здравствуйте!

Вам предложили самостоятельно разобраться в СУБД? Вообще ничего не рассказав?
Интересно, что они при этом ожидают получить sad

Я бы пошел от изделия. Берем изделие, ищем детали, из которых оно делается (кстати,
почему изделие делается только из одного вида деталей?). Ищем поставки, которые
покрывают эти детали и считаем количество поставщиков. Если оно при этом равно
суммарному количеству поставщиков — мы выиграли.

SELECT izdel.id, COUNT(*)
FROM izdel, detal, postavki
WHERE izdel.name = detal.name AND
detal.name = postavki.product
GROUP BY izdel.id

Неактивен

 

#3 08.03.2011 02:08:41

kpik
Участник
Зарегистрирован: 07.03.2011
Сообщений: 7

Re: Задание: Создание БД и вывод данных

paulus, Я даже не знаком с субд такой как MySQL. И как видите я весело попал, Вы бы не могли подробнее рассказать какие запросы создать и как вывести согласно моему заданию примерно как указано в примере. (И желательно объяснить как и зачем)

Неактивен

 

#4 08.03.2011 22:50:05

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Задание: Создание БД и вывод данных

Ну хоть с какой-то базой данных Вы знакомы? Представляете себе, что такое
реляционные базы?

Неактивен

 

#5 08.03.2011 23:25:09

kpik
Участник
Зарегистрирован: 07.03.2011
Сообщений: 7

Re: Задание: Создание БД и вывод данных

создавать могу, а вот структуру не знаю

пособия все до одного места, вы не могли бы наглядно показать как это можно сделать согласно задания?

как я понял нужно создать 4 файла: db.php index.php postav.php rating.php

данные в пхп файлах если не ошибаюсь те же?

Неактивен

 

#6 08.03.2011 23:44:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Задание: Создание БД и вывод данных

Т.е. Вы не хотите изучать тему самостоятельно, а хотите, чтобы я за Вас сделал
задание? Нет, я это делать не буду.

PHP к базам данных отношения не имеет. Есть ощущение, что его Вам тоже пред-
стоит изучить. Вопросы по PHP следует задавать на webew.ru. Но, если вопросы
будут вида «напишите за меня», — скорее всего, тоже ответа не получите.

Неактивен

 

#7 09.03.2011 01:41:33

kpik
Участник
Зарегистрирован: 07.03.2011
Сообщений: 7

Re: Задание: Создание БД и вывод данных

Нет,  наоборот хочу! и желательно разобраться на всем готовом можно было просто у у кого то попросить ... а на форуме я хочу чтобы объяснили!!!!

почему не имеет? ведь через пхп вывод данных с бд

Неактивен

 

#8 09.03.2011 14:58:43

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Задание: Создание БД и вывод данных

Тогда почитайте про реляционные базы данных. Хотя бы в википедии.

Структура базы у Вас уже есть (найдите в своем задании). Вам нужно
разобраться с объединениями таблиц. Когда две таблицы написаны
через запятую в одном запросе (SELECT ... FROM a, b), выбираются все
строки одной таблицы и для каждой строки выбираются все строки дру-
гой таблицы (т.е. суммарное количество строк будет равно произведе-
нию количеств строк отдельных таблиц). Ограничения WHERE, соответ-
ственно, выбирают только некоторые из этих строк.

Когда Вы это осознаете, поймете и мой первый ответ.

Что касается PHP — это один из самых неудачных способов работы с базой
данных, тем более — на этапе базового изучения. Воспользуйтесь стандарт-
ным клиентом mysql или на худой конец — MySQL Workbench.

Неактивен

 

#9 13.03.2011 20:37:00

kpik
Участник
Зарегистрирован: 07.03.2011
Сообщений: 7

Re: Задание: Создание БД и вывод данных

Если я правиль понял то что вы предложили нужно использовать место:


SELECT id,supplier,MAX(kol) as kol FROM postavki WHERE product
 


???


я что-то не пойму как нужно изменить reting.php

чтобы можно было изменить РЕЙТИНГ

Отредактированно kpik (15.03.2011 20:36:57)

Неактивен

 

#10 16.03.2011 21:41:52

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Задание: Создание БД и вывод данных

Насколько я понимаю, Ваш rating.php уже изменяет РЕЙТИНГ.

Неактивен

 

#11 17.03.2011 00:46:02

kpik
Участник
Зарегистрирован: 07.03.2011
Сообщений: 7

Re: Задание: Создание БД и вывод данных

да увеличивает рейтинг поставщика,который выполнил наибольшую поставку определенной детали

а нужно чтобы можно было увеличить рейтинг поставщиков, которые выполнили больший общий объем поставок на указаную величину ...

Отредактированно kpik (17.03.2011 00:48:38)

Неактивен

 

#12 17.03.2011 01:42:04

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Задание: Создание БД и вывод данных

Ну так напишите, в чем проблема? Код за Вас на PHP на этом форуме вряд ли
кто-то будет писать. Потому что
  а) никто за Вас не будет писать код;
  б) PHP не имеет отношения к MySQL.

Неактивен

 

#13 17.03.2011 02:14:05

kpik
Участник
Зарегистрирован: 07.03.2011
Сообщений: 7

Re: Задание: Создание БД и вывод данных

мне интересно какой запрос нужно создать в рейтинг.пхп

там где

SELECT id,supplier,MAX(kol) as kol FROM postavki WHERE product = '$product'

и

UPDATE postav SET rating = '$rating' WHERE name = '$name'


и объяснить  )))

Неактивен

 

#14 17.03.2011 02:48:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Задание: Создание БД и вывод данных

UPDATE postav SET rating = '$rating' WHERE name = '$name'
Устанавливает rating в значение $rating для тех строк, где name равно $name smile
Чтобы увеличить рейтинг можно написать, например, SET rating = rating + $delta,
где $delta — значение, на которое надо увеличить рейтинг.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson