Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите с трехтабличным запросом
 
 автор: Zozo   (22.03.2009 в 18:02)   письмо автору
 
 

есть 3 таблицы. в первой содержится список дней недели с внешним индексом, выбирающем при щелчке на день соответсвующие записи из второй таблицы (info) для этого дня недели. php-страница извлекает эти записи по такому запросу:
if (isset($_GET['id'])) {
  $colname_application = (get_magic_quotes_gpc()) ? $_GET['id'] : addslashes($_GET['id']);
}
mysql_select_db($database_applications, $applications);
$query_application = sprintf("SELECT id, timestart, timeend, techid, prepod, more, now, number FROM info WHERE dayid = %s ORDER BY timestart ASC", $colname_application);
$application = mysql_query($query_application, $applications) or die(mysql_error());
$row_application = mysql_fetch_assoc($application);

и размещает их в таблице, в повторяющейся области (записей, соответсвующих дню недели - несколько) :
<?php do { ?>
    <tr>
      <td><?php echo $row_application['timestart']; ?>-<?php echo $row_application['timeend']; ?>     </td>
      <td><?php echo $row_application['number']; ?></td>
      <td>??????????тут безуспешно пытался выводить значение поля complect третьей таблицы???????????</td>
      <td><?php echo $row_application['prepod']; ?></td>
      <td><?php echo $row_application['more']; ?></td>
      <td><?php echo $row_application['now']; ?></td>
         </tr>
    <?php } while ($row_application mysql_fetch_assoc($application)); ?>
А в третьей таблице (equipment) содержится список техники (первое поле - complect) и ключ id (второе поле), который соответсвует индексному полю воторой таблицы (techid). Пытался сделать чтобы таже страница, которая выполняет первый запрос и выводит данные в повторяющуюся облать, выводила и наименование техники из третьей таблицы (поле complect), соответвующее извлекаемому значению techid, но создать такой запрос не получилось :( - во всей колонке таблицы вывелись одинаковые значения комплекта оборудования. Кто-нибудь может помочь?

  Ответить  
 
 автор: а-я   (22.03.2009 в 18:24)   письмо автору
 
   для: Zozo   (22.03.2009 в 18:02)
 

Покажи структуры всех таблиц, и по каким полям хочешь связать…

  Ответить  
 
 автор: Zozo   (22.03.2009 в 18:42)   письмо автору
 
   для: а-я   (22.03.2009 в 18:24)
 

таблица с наименованием техники equipment:
первичный ключ - поле Id
наименвоание техники - поле сomplect

таблица с информацией о технике в означенный день (info). Поля, извлекаемые по запросу, который я показал, - id, timestart, timeend, techid, prepod, more, now, dayid. Уникальный идентификатор-счётчик тут - id. Поле techid соответсвует записям таблицы с наименвоанием техники (его значения равны полю id таблицы equipment). И вот нужно извлечь значение поля complect из таблицы equipment, пользуясь имеющимся в ней идентификатором id, соответсвующим индексу techid, который я извлекаю из второй таблицы в запросе.

  Ответить  
 
 автор: Trianon   (22.03.2009 в 18:47)   письмо автору
 
   для: Zozo   (22.03.2009 в 18:42)
 

SELECT i.*, e.complect 
  FROM info i LEFT JOIN equipment e ON i.techid = e.id 
  WHERE dayid = %s ORDER BY timestart ASC

  Ответить  
 
 автор: Zozo   (22.03.2009 в 19:03)   письмо автору
 
   для: Trianon   (22.03.2009 в 18:47)
 

а без объединения записей никак? я с этими операторами раньше не работал..

  Ответить  
 
 автор: Trianon   (22.03.2009 в 19:09)   письмо автору
 
   для: Zozo   (22.03.2009 в 19:03)
 

здесь нет объединения записей.
Здесь используется соединение таблиц.
И если Вы хотите вытаскивать данные из другой таблицы (как Вы описали в условии) - без соединения никак не обойтись.

Операция LEFT JOIN нестрашная. Куда менее страшная, чем запятая, которую обычно приводят в учебниках...

  Ответить  
 
 автор: Zozo   (22.03.2009 в 19:22)   письмо автору
 
   для: Trianon   (22.03.2009 в 19:09)
 

спасибо, попробую..

  Ответить  
 
 автор: Zozo   (23.03.2009 в 09:58)   письмо автору
 
   для: Trianon   (22.03.2009 в 19:09)
 

Trianon спасибо за помощ. Много данных из таблиц я не извлекаю так что запрос работает не долго.

  Ответить  
 
 автор: Trianon   (23.03.2009 в 10:02)   письмо автору
 
   для: Zozo   (23.03.2009 в 09:58)
 

он в любом случае работает быстро.
Поскольку доступ ко второй таблице идет через индекс первичного ключа.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования