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 :: Версия для печати :: Запрос к двум таблицам в базе (MySQL)
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Запрос к двум таблицам в базе (MySQL)

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

1. roman_php - 20 Сентября, 2009 - 15:20:12 - перейти к сообщению
Доброго времени суток!
Я новичек во всех смыслах (PHP, MySQL), обращаюсь к вам за помощью.
Я делаю небольшую систему запросов пользователей к базе и присутствует необходимость выбирать определенные записи по датам.
По-порядку, есть база в ней две таблицы.
Первая:
CODE (text):
скопировать код в буфер обмена
  1. --
  2. -- Структура таблицы `user`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `user` (
  6.   `id` int(4) NOT NULL auto_increment,
  7.   `username` varchar(255) NOT NULL,
  8.   `fio` varchar(255) NOT NULL,
  9.   `dolznost` varchar(255) NOT NULL,
  10.   PRIMARY KEY  (`id`)
  11. ) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=9 ;
  12.  


Вторая:
CODE (text):
скопировать код в буфер обмена
  1. --
  2. -- Структура таблицы `zapros`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `zapros` (
  6.   `id` int(11) NOT NULL auto_increment,
  7.   `spec` varchar(255) NOT NULL,
  8.   `adres` text NOT NULL,
  9.   `obekt` varchar(255) NOT NULL,
  10.   `primech` text NOT NULL,
  11.   `datazaprosa` date NOT NULL,
  12.   PRIMARY KEY  (`id`)
  13. ) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=11 ;
  14.  


Я обращаюсь запросом к таблице "zapros" где $dateg - это дата передаваемая формой
CODE (text):
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT * FROM zapros WHERE datazaprosa = '$dateg'");

далее вывожу в цыкле все результаты которые соответствуют определенной даты ($dateg) и делаю из них таблицу
CODE (text):
скопировать код в буфер обмена
  1. <table width="90%" border="0" align="center">
  2.  <tr>
  3.  <td class="td1"><center>ФИО и должность специалиста</center></td>
  4.  <td class="td1"><center>Адрес объекта</center></td>
  5.  <td class="td1"><center>Наименование объекта</center></td>
  6.  <td class="td1"><center>Примечание</center></td>
  7.  <td class="td1"><center>Дата запроса</center></td>
  8.  </tr>
  9.   <?php
  10.   $myrow = mysql_fetch_row($result);
  11.   do{echo"<tr><td>$myrow[1]</td>
  12.   <td>$myrow[2]</td>
  13.   <td>$myrow[3]</td>";
  14.   if($myrow[4]!==""){echo"<td>$myrow[4]</td>";}else{echo"<td><font color='#FF0000'>нет</font></td>";}
  15.   echo"<td>$dates</td></tr>";}
  16.   while ($myrow = mysql_fetch_row($result));
  17.   ?>
  18. </table>


В элемент массива $myrow[1] попадают все поля "spec" из таблицы "zapros", но там такого вида например (gorelov, sorokina, sidorov и т.д.)
В таблице "user" есть поле "username" которое также имеет содержание с пользователями (gorelov, sorokina, sidorov и т.д.). Поле "fio" содержит полное Фамилие Имя Отчество пользователя.
Мне надо сделать такой запрос что бы из таблицы "zapros" выбирались поля spec`
`adres``obekt` `primech``datazaprosa`, а на место элемента массива в цикле подставлялись полные ФИО пользователей из таблицы "user" -> поля "fio"
Тоесть фактически нужно одним запросом выбрать разные поля из двух разных таблиц и вывести их в цикле где бы gorelov соотсетствовало Горелов Роман Геннадьевич полное ФИО.

Не предлогайте переделать структуру базы (это не приемлемо пока). Как можно это осуществить может не только запросом а средствами PHP.
Помогите пожалуйста, очень надеюсь на ващу помощь
(Добавление)
Что, ни кто не поможет?
2. EuGen - 20 Сентября, 2009 - 20:03:36 - перейти к сообщению
Во-первых, в таблице может быть ни одной записи, поэтому цикл с постусловием не подходит.
Во-вторых, используйте JOIN, если я правильно понял.
В-третьих, все-таки неймспейсинг у Вас страдает - именуйте элементы системы так, чтобы название соответствовало предназначению.
3. Viper - 21 Сентября, 2009 - 07:52:36 - перейти к сообщению
а как вы сделаете соответствие fio и username если у вас нет привязки ?

т.е. при составлении условия вам нужно будет ещё одно поле (к примеру userid) которое будет в обоих таблицах. тогда вы сможете точно знать что username bobik соответствует fio Бобик Татьяна Ивановна, а не Кошак Иван Иванович.

это чисто мое имхо. или я не прав ?
4. roman_php - 21 Сентября, 2009 - 18:36:03 - перейти к сообщению
Viper пишет:
а как вы сделаете соответствие fio и username если у вас нет привязки ?

т.е. при составлении условия вам нужно будет ещё одно поле (к примеру userid) которое будет в обоих таблицах. тогда вы сможете точно знать что username bobik соответствует fio Бобик Татьяна Ивановна, а не Кошак Иван Иванович.

это чисто мое имхо. или я не прав ?


Вот я и не знаю, структуру базы указал, жду конкретной помощи

 

Powered by ExBB FM 1.0 RC1