neonet
Новичок
вывод данных из связанных таблиц
Есть 2 таблицы в связке..
1 -я: Содержит в себе контактные данные по категориям - клиенты, отправитель, получатель, и т.п
2-я: Поля qry_sender, qry_recipient, qry_transporter, qry_client этой таблици связанны с clients.clt_id
Задача такая:
сделать SQL-запрос таким чтоб выводил все данные из таблицы 'query' включая строки где в полях NULL , и по ID *(лежащие в:qry_sender, qry_recipient, qry_transporter, qry_client ) подменивал данные на данные из clients.clt_name .
Такой запрос дает возможность вытащить clients.clt_name и поставить его вместо query.qry_sender.
Пример 1:
Пробую сделать так
Пример 2:
не выходит, да и не понятно из какой переменной вытащить clt_name для каждого поля (qry_sender, qry_recipient, qry_transporter, qry_client ) в отдельности.
Можно канечно убрать категории с таблицы clients и вместо них сделать несколько таблиц , И сделать таким образом:
Пример 3:
но так делать не очень хочеться, Подскажите пожалуйста, есть ли возможность сделать таким образом чтоб при выводе данных циклом в переменную $row['qry_sender'] - попадали бы данные из clients.clt_name по ID ?
Пока только получаеться вывести данные из clients.clt_name которые попадают в масив $row['clt_name'] только для одной любой категории (qry_sender, qry_recipient, qry_transporter, qry_client )*Пример 1.
Может быть с подзапросом? вот только как это реальизовать я пока не могу понять
Или что то вроде этого?
Что посоветуете:?

Есть 2 таблицы в связке..
1 -я: Содержит в себе контактные данные по категориям - клиенты, отправитель, получатель, и т.п
PHP:
CREATE TABLE `clients` (
`clt_id` int(11) NOT NULL auto_increment,
`clt_name` varchar(255) NOT NULL,
`clt_street` varchar(255) NOT NULL,
`clt_city` varchar(255) NOT NULL,
`clt_country` varchar(255) NOT NULL,
`clt_telefon` varchar(255) NOT NULL,
`clt_mail` varchar(255) NOT NULL,
`clt_category` varchar(255) NOT NULL,
PRIMARY KEY (clt_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
PHP:
CREATE TABLE `query` (
`qry_id` int( 11 ) NOT NULL AUTO_INCREMENT ,
`qry_sender` int( 11 ) default NULL,
`qry_recipient` int( 11 ) default NULL,
`qry_transporter` int( 11 ) default NULL,
`qry_client` int( 11 ) default NULL,
`qry_for` varchar( 255 ) NOT NULL ,
`qry_loading` date NOT NULL ,
`qry_discharge` date NOT NULL ,
`qry_user` int( 11 ) NOT NULL ,
`qry_datetime` datetime NOT NULL ,
`qry_status` int( 11 ) NOT NULL ,
`qry_bemerkungen` text NOT NULL ,
`qry_stapelbar` int( 11 ) NOT NULL ,
PRIMARY KEY ( `qry_id` ),
FOREIGN KEY ( `qry_sender` ) REFERENCES `clients` ( `clt_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ( `qry_recipient` ) REFERENCES `clients` ( `clt_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION ,
FOREIGN KEY ( `qry_transporter` ) REFERENCES `clients` ( `clt_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION ,
FOREIGN KEY ( `qry_client` ) REFERENCES `clients` ( `clt_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
сделать SQL-запрос таким чтоб выводил все данные из таблицы 'query' включая строки где в полях NULL , и по ID *(лежащие в:qry_sender, qry_recipient, qry_transporter, qry_client ) подменивал данные на данные из clients.clt_name .
Такой запрос дает возможность вытащить clients.clt_name и поставить его вместо query.qry_sender.
Пример 1:
PHP:
$q = "select clients.clt_name , *
from `query`
LEFT JOIN clients ON clients.clt_id = query.qry_sender";
while ($row = mysql_fetch_array($q)) {
echo $row['qry_id']."|".$row['clt_name']."|".$row['qry_datetime']."<br>";
}
Пример 2:
PHP:
$q = "select clients.clt_name , *
from `query`
LEFT JOIN clients ON clients.clt_id = query.qry_sender
LEFT JOIN clients ON clients.clt_id = query.qry_recipient
LEFT JOIN clients ON clients.clt_id = query.qry_transporter
LEFT JOIN clients ON clients.clt_id = query.qry_client";
Можно канечно убрать категории с таблицы clients и вместо них сделать несколько таблиц , И сделать таким образом:
Пример 3:
PHP:
$q = "select clients.clt_name , *
from `query`
LEFT JOIN sender ON sender.sender_id = query.qry_sender
LEFT JOIN recipient ON recipient.recipient _id = query.qry_recipient
LEFT JOIN transporter ON transporter.transporter_id = query.qry_transporter
LEFT JOIN clients ON clients.clt_id = query.qry_client";
Пока только получаеться вывести данные из clients.clt_name которые попадают в масив $row['clt_name'] только для одной любой категории (qry_sender, qry_recipient, qry_transporter, qry_client )*Пример 1.
Может быть с подзапросом? вот только как это реальизовать я пока не могу понять
Или что то вроде этого?
PHP:
SELECT * FROM clients as clt, query as qry
where (
clt.clt_id = qry.qry_sender
) and (
clt.clt_id = qry.qry_recipient
) and (
clt.clt_id = qry.qry_transporter
)and (
clt.clt_id = qry.qry_clients
)
