1

Тема: Реляционные базы данных.Реализация в PhpMyAdmin/

Значит дело обстоит так, что есть несколько таблиц в которых инфа/данные поступают разными способами (в одни вноситься вручную, в другие вносит скрипт). Например есть табличка "Юзер" куда тот же юзер вносит данные про себя через окошко браузера. Есть таблички "софт", "железо"....и т.д. куда данные вносит скрипт который ето все дело сканит. И...теперь самое что незнаю как сделать. Есть отдельная табличка в которую предполагаеться сбор данных со всех остальных табличек. В ней содержаться столбцы как бы на каждую из уже существующих табличек. Есть табличка "Юзер" из нее беруться данные в столбик "Юзер", есть табличка "Софт" из нне данные беруться в столбик "Софт"....тоесть здесь данные должны браться не из внешних источников а из других таблиц. Как ето сделать пока не нашел...
Поетому пришел сюда за помощью. Искренне надеюсь.

2

Re: Реляционные базы данных.Реализация в PhpMyAdmin/

У всех таблиц, которые необходимо связать, должен быть первичный ключ.
В отдельной таблице необходимо собрать именно идентификаторы и связать их с данными в таблицах.

Я не понял как связаны таблицы "Юзер", "софт" и "железо". Если вы покажете структуры таблиц, объясните как они между собой связаны и какие поля необходимо вынести в отдельную таблицу, то попробуем сделать.

3

Re: Реляционные базы данных.Реализация в PhpMyAdmin/

Hanut сказал:

У всех таблиц, которые необходимо связать, должен быть первичный ключ.
В отдельной таблице необходимо собрать именно идентификаторы и связать их с данными в таблицах.

Я не понял как связаны таблицы "Юзер", "софт" и "железо". Если вы покажете структуры таблиц, объясните как они между собой связаны и какие поля необходимо вынести в отдельную таблицу, то попробуем сделать.

Таблицы "Юзер","Софт","Железо" пока никак не связаны, да и в принципе если не будет необходимости то и не будут. То есть в "Юзер" пользователи вносят свои данные, там Имя, Фамилию, Отчество, Должность..., в таблицы "Софт", "Железо" вносится вручную или сканом набор всего софта и железа что есть на фирме(без повторов, т.е. если есть 10 целеронов и 20 атлонов то будет две позиции 1)целерон 2)атлон).
И потом в отдельную таблицу данные беруться с уже набитых. Например первое поле Юзер: берется с таблицы Юзерс, поле железо с таблицы Железо, монитор с мониторов.
Первичным ключом я сделал поле АйДи.
Я себе представляю дело так.
Вношу первого юзера(вернее он сам себя вносит) когда он жмет кнопку "Подтвердить" запускается скрипт который парсит сделаные ранее отчеты евереста. Смотрит процессор АТЛОН, значит ставит в поле Процессор АйДи которое присуще Атлону из соответств. таблицы. Если какой то появился например Семпрон которого небыло, создает новую запись. и.т.д.
Меня интересует именно как реализовать привязку по первичным ключам данных из одной таблицы в другую!

4

Re: Реляционные базы данных.Реализация в PhpMyAdmin/

dirtzond
Зайдите в дизайнер. Нажмите "Создать связь", выберите первичный (ссылочный) ключ, затем внешний ключ; после, нажмите "Выбор отображаемого столбца" и выберите желаемое поле.

Но сводную таблицу необходимо забивать данными (первичными ключами) на этапе их вставки. Записали нового пользователя, взяли его id и вставили в сводную таблицу, то же самое с остальными таблицами "Софт" и т. д.

5

Re: Реляционные базы данных.Реализация в PhpMyAdmin/

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

Сообщение добавлено Mon Nov 24 19:01:42 2008
Вопрос снимаеться.
Нашел что его нужно доставлять.
Пока в процессе, возникнут трудности отпишусь.

Спасибо огромное за наводку!

6

Re: Реляционные базы данных.Реализация в PhpMyAdmin/

С дизайнером я разобрался.
Интересует следующее, можно ли назначить несколько отображаемых столбцов или привязка идет 1:1.
Я предполагал как, что в отдельной таблице будут отображаться данные со всех столбцов другой таблицы. Если в таблице "Юзер" есть 3 поля: Имя, Фамилия, Отчество, то все они будут отображены в отдельной таблице в поле Юзер.
Или так нельзя?

7

Re: Реляционные базы данных.Реализация в PhpMyAdmin/

dirtzond
Выбрать можно только один отображаемый столбец для поля. Поэтому для вывода нескольких полей с данными из одной таблицы необходимо в сводной таблице иметь их такое же количество.

Если необходимо объединить несколько таблиц со всеми (или некоторыми) имеющимися данными, то вероятно было бы лучше составить Вьюшку (CREATE VIEW) содержащую запрос объединяющий несколько таблиц с помощью INNER JOIN. Либо, если необходима передача параметра (скажем для вывода только одной записи объединенных таблиц), то можно создать процедуру.

8 (изменено: dirtzond, 2008-11-26 14:03:05)

Re: Реляционные базы данных.Реализация в PhpMyAdmin/

Спасибо огромное за помощь! Пока что все получаеться!))


П.С.
Еще маленький вопрос. Может не совсем по теме, но вдруг кто знает.
У меня методом ГЕТ передаеться определенная переменная.
Можно ли осуществить поиск файла в имени которого содержиться значение переменной.

Так чтобы совсем понятно: Есть папка с файлами отчета. Файлы все названы так: Юзер1@192-168-1-1, Юзер2@192-168-1-2,....и т.д.
Скрипт передает переменную $ІР со значением, например 2, как сделать и можно ли сделать поиск и доступ к файлу в имени которого есть "192-168-1-$IP", в данном случае Юзер2@192-168-1-2???

9

Re: Реляционные базы данных.Реализация в PhpMyAdmin/

Не понял на счет доступа, но получить имя файла для последующего разбора можно так.

<?php

function GetFileName($id) {
    $return = false;
    $dir = './dir/';
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                if (is_file($dir . $file)
                    && preg_match('/^.+@\d+-\d+-\d+-(\d+)$/', $file, $preg_matches))
                {
                    if ($preg_matches[1] == $id) {
                        $return = $dir . $file;
                        break;
                    }
                }
            }
            closedir($dh);
        }
    }
    return $return;
}

if (isset($_GET['id'])) {
    if ($file_name = GetFileName($_GET['id'])) {
//        $file_name теперь содержит искомое имя файла.
    }
}

?>