2010-05-17 3 views
3

Я работаю над БД Asset, используя стек лампы.Как написать этот запрос MySQL?

В этом примере рассмотрит следующие 5 таблиц:

активов, сервера, ноутбука, рабочего стола, программного обеспечения

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

Каждый объект имеет все атрибуты актива, а затем в зависимости от типа актива имеет дополнительные атрибуты в соответствующей таблице. Если тип - это сервер, рабочий стол или ноутбук, он также имеет элементы в таблице программного обеспечения.

Вот таблица создания операторов:

// connect to mysql server and database "asset_db" 
mysql_connect("localhost", "asset_db", "asset_db") or die(mysql_error()); 
mysql_select_db("asset_db") or die(mysql_error()); 

// create asset table 
mysql_query("CREATE TABLE asset(
id VARCHAR(50) PRIMARY KEY, 
company VARCHAR(50), 
location VARCHAR(50), 
purchase_date VARCHAR(50), 
purchase_order VARCHAR(50), 
value VARCHAR(50), 
type VARCHAR(50), 
notes VARCHAR(200))") 
or die(mysql_error()); 
echo "Asset Table Created.</br />"; 

// create software table 
mysql_query("CREATE TABLE software(
id VARCHAR(50) PRIMARY KEY, 
software VARCHAR(50), 
license VARCHAR(50))") 
or die(mysql_error()); 
echo "Software Table Created.</br />"; 

// create laptop table 
mysql_query("CREATE TABLE laptop(
id VARCHAR(50) PRIMARY KEY, 
manufacturer VARCHAR(50), 
model VARCHAR(50), 
serial_number VARCHAR(50), 
esc VARCHAR(50), 
user VARCHAR(50), 
prev_user VARCHAR(50), 
warranty VARCHAR(50))") 
or die(mysql_error()); 
echo "Laptop Table Created.</br />"; 

// create desktop table 
mysql_query("CREATE TABLE desktop(
id VARCHAR(50) PRIMARY KEY, 
manufacturer VARCHAR(50), 
model VARCHAR(50), 
serial_number VARCHAR(50), 
esc VARCHAR(50), 
user VARCHAR(50), 
prev_user VARCHAR(50), 
warranty VARCHAR(50))") 
or die(mysql_error()); 
echo "Desktop Table Created.</br />"; 

// create server table 
mysql_query("CREATE TABLE server(
id VARCHAR(50) PRIMARY KEY, 
manufacturer VARCHAR(50), 
model VARCHAR(50), 
warranty VARCHAR(50))") 
or die(mysql_error()); 
echo "Server Table Created.</br />"; 

?> 

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

спасибо.

ответ

2
SELECT asset.id 
    ,asset.company 
    ,asset.location 
    -- ,... Any more columns from asset 
    ,software.software 
    ,software.license 
    ,laptop.model AS laptop_model 
    ,desktop.model AS desktop_model 
    -- etc. 
    ,COALESCE(laptop.model, server.model, desktop.model) AS model -- assumes only one non-NULL 
FROM asset 
LEFT JOIN software 
    ON software.id = asset.id 
LEFT JOIN laptop 
    ON laptop.id = asset.id 
LEFT JOIN desktop 
    ON desktop.id = asset.id 
LEFT JOIN server 
    ON server.id = asset.id 
WHERE asset.id = <your_id> 
+0

Спасибо, я немного запутался в AS laptop_model и AS desktop_model. Не могли бы вы уточнить? Извините за это ... –

+0

@CT Если у вас есть столбцы с одинаковыми именами, обычно их псевдоним делает их однозначными. В некоторых средах доступа к данным также трудно извлечь правильный столбец, если у вас есть несколько столбцов с тем же именем в наборе строк. –

Смежные вопросы