Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Можно ли в php проводить выборку сразу из 2-х таблиц.
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Можно ли в php проводить выборку сразу из 2-х таблиц.

Страниц (1): [1]
 

1. maximka - 04 Июня, 2007 - 12:32:25 - перейти к сообщению
Проблема вот. Делаю курсовой - есть таблица, в ней есть 2 поля klient и lek. Через них идет связь с таблицами klient и lek соответсвенно. Необходимо через эти поля получать значения из этих таблиц. Можно ли в php написать такой запрос?

Простой запрос, например: $query="select * from klient order by name"; все понятно, а тут.... не пойму никак...Это вот для одной таблицы - $query="select * from lek, zakaz where lek.id=zakaz.lek";

Вот код. Я с php тока сейчас так сказать познакомился))) - учеба. помогите, кто чем может.

? Error_Reporting(E_ALL & ~E_NOTICE);

$link = @mysql_pconnect("localhost","root") or die("не могу соедениться с сервером");
$seldb = mysql_select_db("apteka", $link) or die("не могу соедениться с базой данных");

$query="??????? Чего тут надо написать ?????????";
$result = mysql_query($query);

print "<h1>Список заказов</h1><br>
<form action='controller.php' method='post'>
<table border='1'> <tr><th>ФИО <th> лекарство <th>колво
<input type='hidden' name='target' value='deleteZakaz'>";

while ($row < mysql_num_rows($result)):
$klient = mysql_result($result, $row, 'klient.id');
$lek = mysql_result($result, $row, 'lek.id');
$kolvo = mysql_result($result, $row, 'kolvo');
$id = mysql_result($result, $row++, 'id');
print "<tr><th> $klient <th>$lek <th>$kolvo <th>
<input type='checkbox' name='delete$id' value='$id'>";
endwhile;

print "</table> <input type='button' value='Добавить заказ' onClick="document.location='addZakaz.php'">
<input type="submit" value="delete"><br><br><a href = index.php>перейти на главную</a>";

?>
2. evgenijj - 04 Июня, 2007 - 17:00:55 - перейти к сообщению
Сказать, что написал бестолково - ничего не сказать.

Есть таблица (что за таблица, какую информацию хранит, какие поля содержит...), в ней есть 2 поля klient и lek. Через них идет связь с таблицами klient и lek соответсвенно (что за связь (внешние ключи?), что за таблицы, какую информацию хранят, какие поля...).
Это вот для одной таблицы - $query="select * from lek, zakaz where lek.id=zakaz.lek"; Может быть, ты и нам объяснишь, ЧТО надо сделать.
С твоих слов ничего понять нельзя. Можно сделать предположение, что речь идет об Интернет-магазине?

Пример.

Есть таблица Orders в которой хранится информация о заказах покупателей Интернет-магазина (аптека).
PHP:
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE `orders` (
  3.   `id_order` int(11) NOT NULL auto_increment,
  4.   `order_time` datetime default NULL,
  5.   `id_customer`
  6.   PRIMARY KEY  (`id_order`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
  8.  

id_order - уникальный идентификатор заказа
order_time - время заказа
id_customer - уникальный идентификатор клиента, сделавшего заказ

Таблица Products товарных позиций (лекарства)
PHP:
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE `products` (
  3.   `id_prd` int(10) unsigned NOT NULL auto_increment,
  4.   `title` varchar(255) NOT NULL default '',
  5.   `price` float unsigned NOT NULL default '0.0',
  6.   `description` mediumtext NOT NULL,
  7.   `image` varchar(32) NOT NULL default '',
  8.   PRIMARY KEY  (`id_prd`),
  9. ) TYPE=InnoDB;
  10.  

id_prd - уникальный идентификатор товарной позиции
title - наименование
description - описание
................................

Таблица Customers - хранит информацию о клиентах (покупателях)
PHP:
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE `customers` (
  3.   `id_customer` smallint(11) NOT NULL auto_increment,
  4.   `email` varchar(32) NOT NULL default '',
  5.   `password` varchar(32) NOT NULL default '',
  6.   `name` varchar(32) NOT NULL default '',
  7.   `surname` varchar(32) NOT NULL default '',
  8.   `country` varchar(32) NOT NULL default '',
  9.   `state` varchar(32) NOT NULL default '',
  10.   `city` varchar(32) NOT NULL default '',
  11.   `zip` varchar(6) NOT NULL default '',
  12.   `address` varchar(255) NOT NULL default '',
  13.   `phone` varchar(32) NOT NULL default '',
  14.   PRIMARY KEY  (`id_user`)
  15. ) TYPE=InnoDB;
  16.  

id_customer - уникальный идентификатор покупателя
................................ ........................

Таблица ordered_items - информация о заказанных товарных позициях
PHP:
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE `ordered_items` (
  3.   `id_prd` int(10) unsigned NOT NULL,
  4.   `id_order` int(10) unsigned NOT NULL,
  5.   `quantity` smallint(5) unsigned NOT NULL default '0',
  6.   PRIMARY KEY  (`id_prd`,`id_order`)
  7. ) TYPE=InnoDB;
  8.  

id_prd - уникальный идентификатор товарной позиции
id_order - уникальный идентификатор заказа
................................ ...........................

Внешние ключи:
PHP:
скопировать код в буфер обмена
  1.  
  2. ALTER TABLE `orders`
  3. ADD CONSTRAINT `fk_orders_customers` FOREIGN KEY (`id_customer`) REFERENCES `customers` (`id_customer`);
  4. ALTER TABLE `ordered_items`
  5. ADD CONSTRAINT `fk_ordered_items_products` FOREIGN KEY (`id_prd`) REFERENCES `products` (`id_prd`);
  6. ALTER TABLE `ordered_items`
  7. ADD CONSTRAINT `fk_ordered_items_orders` FOREIGN KEY (`id_order`) REFERENCES `orders` (`id_order`);
  8.  


И вот после этого можно задавать вопрос "А как составить запрос ..."
3. maximka - 04 Июня, 2007 - 17:14:22 - перейти к сообщению
ладно братишка не ругайся... то, что я бестолочь я и так знаю... лучше посоветуй книжек по mysql... пожалуйста...
Просто я php сегодня в первый раз в жизни увидал, а завтра защита... волнуюсь чутокОднако
4. evgenijj - 04 Июня, 2007 - 19:46:32 - перейти к сообщению
maximka пишет:
ладно братишка не ругайся... то, что я бестолочь я и так знаю... лучше посоветуй книжек по mysql... пожалуйста...
Просто я php сегодня в первый раз в жизни увидал, а завтра защита... волнуюсь чутокОднако

Тебе нужны книги не по MySQL, а по SQL.
http://www[dot]books[dot]ru/shop/books/286101
http://www[dot]books[dot]ru/shop/books/489736

Что касается твоей задачи - можно получить данные из 2-х, 3-х и более таблиц.

Получаем общую сумму всех заказов для каждого покупателя (данные берем из 4-х таблиц)
PHP:
скопировать код в буфер обмена
  1.  
  2. SELECT c.id_customer, c.surname, SUM(oi.quantity*p.price) AS total
  3. FROM customers c INNER JOIN orders o ON c.id_customer=o.id_customer
  4. INNER JOIN ordered_items oi ON oi.id_order=o.id_order
  5. INNER JOIN products p ON oi.id_prd=p.id_prd
  6. GROUP BY c.id_customer
  7. ORDER BY SUM(oi.quantity*p.price) DESC
  8.  

5. -SCHATTEN- - 05 Июня, 2007 - 19:30:09 - перейти к сообщению
Чес слово мало что понял. Но на один фопрос отвечу.
Цитата:
$query="??????? Чего тут надо написать ?????????";

тут пишется запрос к базе данных. Например
SELECT * FROM players WHERE id IN (99, 100, 101)

 

Powered by ExBB FM 1.0 RC1