[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывести информацию из склеенных таблиц
kolyabis
Добрый вечер всем. Подскажите пожалуйста, проблема с выводом.
Есть код, в котором в цикле должна выводится информация о поездах, запрос к базе в этом коде соединенный с двух таблиц, так как в таблице ( станции ) находится информация о станциях с их названиями, а в таблице ( поезда ) информация о маршруте, начальной и конечной остановке, только начальная и конечная, это уникальный id с таблицы (станции) где под этим id имя станции.
Проблема в чем, написан код, но наверно не правильно написан когда в цикле сам вывод начинается, так как ошибка вылазит в этом месте.
 while ($row1 = mysql_fetch_array ($sql1)) {  

а сам код этого вывода с запросом вот.
<table width="60%" border="1" align="center">
<
tr align="center">
<
td>№ поезда</td>
<
td>Начальная станция</td>
<
td>Конечная станция</td>
<
td>Дата/время отправки</td>
<
td>Дата/время прибытия</td>
<
td>Маршрут</td>
</
tr>
<?php
//$sql = mysql_query("SELECT `uz_stanciya.id_stanciya`,`uz_stanciya.trasa_ua`,`uz_stanciya.trasa_ru`,`uz_poezda.id_st1`,`uz_poezda .id_st2` FROM `uz_poezda` INNER JOIN `uz_stanciya` ON `uz_poezda`.`id_st1`,`uz_poezda`.`id_st2` = `uz_stanciya.id_stanciya`");


$sql1 = mysql_query("SELECT `uz_stanciya.id_stanciya`,`uz_stanciya.trasa_ua`,`uz_stanciya.trasa_ru`,`uz_poezda.id_st1`,`uz_poezda .id_st2` FROM `uz_poezda` WHERE `uz_stanciya.id_stanciya` = `uz_poezda.id_st1` AND `uz_stanciya.id_stanciya` = `uz_poezda.id_st2`");
//Выводим в цикле из базы коды и названия дорог, с возможностью переключения языка.
while ($row1 = mysql_fetch_array ($sql1)) {
echo '<tr align="center">
<td><a href="dorogi.php?cod_id='
.$row1["cod_id"].'&lang='.$_LNG.'">'.$row1['id_poizda'].'</a></td>
<td><a href="dorogi.php?cod_id='
.$row1["cod_id"].'&lang='.$_LNG.'">'.$row1['uz_stanciya.id_stanciya` = `uz_poezda.id_st1'].'</a></td>
<td><a href="dorogi.php?cod_id='
.$row1["cod_id"].'&lang='.$_LNG.'">'.$row1['uz_stanciya.id_stanciya` = `uz_poezda.id_st2'].'</a></td>
<td>'
.$row1['time_otp'].'</td>
<td>'
.$row1['time_pri'].'</td>
<td><a href="dorogi.php?cod_id='
.$row1["cod_id"].'&lang='.$_LNG.'">'.$row1['marshrut'].'</a></td>
</tr>'
;
}

?>
</table>


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



Спустя 28 минут, 45 секунд (5.03.2011 - 23:21) kolyabis написал(а):
Мне при разных вариация кода выводит одну и ту же ошибку.


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\raspisanie\www\dorogi.php on line 66


Спустя 1 минута, 22 секунды (5.03.2011 - 23:22) alex12060 написал(а):
$sql1 = mysql_query("SELECT `uz_stanciya.id_stanciya`,`uz_stanciya.trasa_ua`,`uz_stanciya.trasa_ru`,`uz_poezda.id_st1`,`uz_poezda    .id_st2` FROM `uz_poezda` WHERE `uz_stanciya.id_stanciya` = `uz_poezda.id_st1` AND `uz_stanciya.id_stanciya` = `uz_poezda.id_st2`");


Попробуй так:


$sql1 = mysql_query("SELECT `uz_stanciya`.`id_stanciya`,`uz_stanciya`.`trasa_ua`,uz_stanciya.trasa_ru,uz_poezda.id_st1,uz_poezda  .id_st2 FROM `uz_poezda` WHERE uz_stanciya.id_stanciya = uz_poezda.id_st1 AND uz_stanciya.id_stanciya = uz_poezda.id_st2") or die(mysql_error());


Что выводит?

Спустя 3 минуты, 9 секунд (5.03.2011 - 23:26) kolyabis написал(а):
Теперь вылезло вот это, но я проверил, в таблице есть такие поля.

Unknown column 'uz_stanciya.id_stanciya' in 'field list'

Спустя 7 минут, 30 секунд (5.03.2011 - 23:33) Trianon написал(а):
Поскольку требуется выдернуть информацию о двух разных станциях относящихся к одному поезду, потребуется соединить три таблицы: одну "поезда" и две копии таблицы "станция" примерно таким запросом.

SELECT 
p.id_st1, p.id_st2,
s1.`trasa_ua` AS s1_t_ua, s1.`trasa_ru` AS s1_t_ru,
s2.`trasa_ua` AS s2_t_ua, s2.`trasa_ru` AS s2_t_ru,
FROM `uz_poezda` p
LEFT JOIN `uz_stanciya` s1 ON s1.id_stanciya = p.id_st1
LEFT JOIN `uz_stanciya` s2 ON s2.id_stanciya = p.id_st2


Попробуйте выполнить его отдельно, посмотреть, какие столбики и данные он возвращает.
После этого поймете, как вывести данные на стороне php-приложения.

Спустя 3 часа, 18 минут, 24 секунды (6.03.2011 - 02:52) kolyabis написал(а):
С таким запросом, возвращает вот такую ошибку, а так как запрос оказался для меня не понятным, не могу разобраться в чем дело.
[sql]SELECT
p.id_st1, p.id_st2,
s1.`trasa_ua` AS s1_t_ua, s1.`trasa_ru` AS s1_t_ru,
s2.`trasa_ua` AS s2_t_ua, s2.`trasa_ru` AS s2_t_ru,
FROM `uz_poezda` p
LEFT JOIN `uz_stanciya` s1 ON s1.id_stanciya = p.id_st1
LEFT JOIN `uz_stanciya` s2 ON s2.id_stanciya = p.id_st2[sql]


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM `uz_poezda` p LEFT JOIN `uz_stanciya` s1 ON s1.id_stanciya = p.id_st' at line 5

Спустя 5 часов, 53 минуты, 25 секунд (6.03.2011 - 08:45) twin написал(а):
Запятая там лишняя
Цитата
SELECT
    p.id_st1, p.id_st2,
    s1.`trasa_ua` AS s1_t_ua,    s1.`trasa_ru` AS s1_t_ru,
    s2.`trasa_ua` AS s2_t_ua,    s2.`trasa_ru` AS s2_t_ru,
  FROM `uz_poezda` p
      LEFT JOIN `uz_stanciya` s1 ON s1.id_stanciya = p.id_st1
      LEFT JOIN `uz_stanciya` s2 ON s2.id_stanciya = p.id_st2

Спустя 2 часа, 32 минуты, 46 секунд (6.03.2011 - 11:18) Trianon написал(а):
Цитата
Запятая там лишняя


Да, конечно.

Спустя 2 часа, 26 минут, 9 секунд (6.03.2011 - 13:44) kolyabis написал(а):
Стаким запросом, мне теперь не выводит информацию, так и остались просто коды станций вместо их наименований, которые по идее должны были подтягиватсяс таблицы (станции)
Цитата (Trianon @ 5.03.2011 - 20:33)
SELECT
p.id_st1, p.id_st2,
s1.`trasa_ua` AS s1_t_ua, s1.`trasa_ru` AS s1_t_ru,
s2.`trasa_ua` AS s2_t_ua, s2.`trasa_ru` AS s2_t_ru,
FROM `uz_poezda` p
LEFT JOIN `uz_stanciya` s1 ON s1.id_stanciya = p.id_st1
LEFT JOIN `uz_stanciya` s2 ON s2.id_stanciya = p.id_st2


И скорей всего теперь не правильно написан сам цикл с выводом информации, выдало кучу ошибок.

Notice: Undefined index: id_poizda in Z:\home\raspisanie\www\dorogi.php on line 77

Notice: Undefined index: cod_id in Z:\home\raspisanie\www\dorogi.php on line 78

Notice: Undefined index: cod_id in Z:\home\raspisanie\www\dorogi.php on line 79

Notice: Undefined index: time_otp in Z:\home\raspisanie\www\dorogi.php on line 80

Notice: Undefined index: time_pri in Z:\home\raspisanie\www\dorogi.php on line 81

Notice: Undefined index: cod_id in Z:\home\raspisanie\www\dorogi.php on line 82

Notice: Undefined index: marshrut in Z:\home\raspisanie\www\dorogi.php on line 82

Notice: Undefined index: cod_id in Z:\home\raspisanie\www\dorogi.php on line 77

Notice: Undefined index: id_poizda in Z:\home\raspisanie\www\dorogi.php on line 77

Notice: Undefined index: cod_id in Z:\home\raspisanie\www\dorogi.php on line 78

Notice: Undefined index: cod_id in Z:\home\raspisanie\www\dorogi.php on line 79

Notice: Undefined index: time_otp in Z:\home\raspisanie\www\dorogi.php on line 80

Notice: Undefined index: time_pri in Z:\home\raspisanie\www\dorogi.php on line 81

Notice: Undefined index: cod_id in Z:\home\raspisanie\www\dorogi.php on line 82

Notice: Undefined index: marshrut in Z:\home\raspisanie\www\dorogi.php on line 82

Эти все ошибки в каждой строке после вот этой строчки.
 while ($row1 = mysql_fetch_assoc ($sql1)) {  
echo '<tr align="center">

Спустя 57 минут, 41 секунда (6.03.2011 - 14:42) kolyabis написал(а):
Сделал таким образом, результат тот же самый что и если я просто сделаю запрос к одной таблице (поезда). Значение не присвоилось с другой таблицы.
<?php
$sql1 = mysql_query("SELECT
p.id_st1, p.id_st2, p.cod_id, p.id_poizda, p.time_otp, p.time_pri, p.marshrut,
s1.`trasa_ua` AS s1_t_ua, s1.`trasa_ru` AS s1_t_ru,
s2.`trasa_ua` AS s2_t_ua, s2.`trasa_ru` AS s2_t_ru
FROM `uz_poezda` p
LEFT JOIN `uz_stanciya` s1 ON s1.id_stanciya = p.id_st1
LEFT JOIN `uz_stanciya` s2 ON s2.id_stanciya = p.id_st2"
) or die(mysql_error());
//Выводим в цикле из базы коды и названия дорог, с возможностью переключения языка.
while ($row1 = mysql_fetch_assoc ($sql1)) {
echo '<tr align="center">
<td><a href="dorogi.php?cod_id='
.$row1["cod_id"].'&lang='.$_LNG.'">'.$row1['id_poizda'].'</a></td>
<td><a href="dorogi.php?cod_id='
.$row1["cod_id"].'&lang='.$_LNG.'">'.$row1['id_st1'].'</a></td>
<td><a href="dorogi.php?cod_id='
.$row1["cod_id"].'&lang='.$_LNG.'">'.$row1['id_st2'].'</a></td>
<td>'
.$row1['time_otp'].'</td>
<td>'
.$row1['time_pri'].'</td>
<td><a href="dorogi.php?cod_id='
.$row1["cod_id"].'&lang='.$_LNG.'">'.$row1['marshrut'].'</a></td>
</tr>'
;
}

?>

Спустя 16 минут, 8 секунд (6.03.2011 - 14:58) Trianon написал(а):
Тут какое дело...
Я выбрал лишь те поля, кторые присутствовали в Вашем исходном SQL-запросе.
Другие не трогал.
Наверное php-скрипт всё же не соответствует запросу полностью.
В операторе echo нужные поля у Вас указаны во врезках $row1['ИмяПоля'], соответственно SQL-запрос должен выбирать необходимые поля, а оператор echo - их выводить.
Какие именно поля нужны - полностью определяется сутью скрипта и набором столбиков в таблицах.

Спустя 5 минут, 53 секунды (6.03.2011 - 15:04) kolyabis написал(а):
Смысл был в том что на место этих значений (id_st1 и id_st2) досжны выводится не код станции, а название станции. В таблице (поезда) я вношу код станции, а при выводе, на место этого кода надо вывести название с таблицы (станции) там тоже есть этот код станции и имя, так вот это имя надо вывести в этом цикле. Но ничего не получается.
Цитата (kolyabis @ 6.03.2011 - 11:42)
<td><a href="dorogi.php?cod_id='.$row1["cod_id"].'&lang='.$_LNG.'">'.$row1['id_st1'].'</a></td>
<td><a href="dorogi.php?cod_id='.$row1["cod_id"].'&lang='.$_LNG.'">'.$row1['id_st2'].'</a></td>


Спустя 43 минуты, 6 секунд (6.03.2011 - 15:47) Trianon написал(а):
Цитата
надо вывести название с таблицы (станции) там тоже есть этот код станции и имя,


Так Вы знаете название поля, в котором это имя лежит, или нет?

Цитата
так вот это имя надо вывести в этом цикле. Но ничего не получается.


А SQL-запрос это имя выдает?

Спустя 12 минут, 9 секунд (6.03.2011 - 15:59) kolyabis написал(а):
Вот мои таблицы, там по id я связал

Структура таблицы `uz_poezda`
--

CREATE TABLE `uz_poezda` (
`id` int(11) NOT NULL auto_increment,
`id_poizda` int(11) NOT NULL,
`cod_id` int(11) NOT NULL,
`id_st1` int(11) NOT NULL,
`id_st2` int(11) NOT NULL,
`time_otp` datetime NOT NULL,
`time_pri` datetime NOT NULL,
`marshrut` varchar(300) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

--
-- Дамп данных таблицы `uz_poezda`
--

INSERT INTO `uz_poezda` VALUES (1, 664, 32, 2230, 2231, '2011-03-03 14:55:58', '2011-03-04 14:56:14', 'Киев-Одесса');
INSERT INTO `uz_poezda` VALUES (2, 669, 35, 2235, 2236, '2011-03-04 14:04:23', '2011-03-05 14:04:26', '');


-- Структура таблицы `uz_stanciya`
--

CREATE TABLE `uz_stanciya` (
`id_stanciya` int(11) NOT NULL,
`cod_id` int(11) NOT NULL,
`trasa_ua` varchar(300) NOT NULL,
`trasa_ru` varchar(300) NOT NULL,
PRIMARY KEY (`id_stanciya`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

--
-- Дамп данных таблицы `uz_stanciya`
--

INSERT INTO `uz_stanciya` VALUES (2230, 32, 'Авдіївка', 'Авдеевка');
INSERT INTO `uz_stanciya` VALUES (2231, 35, 'sdfsfsd_ua', 'sddsfsdf_ru');


Так вот, в цикле, там где я писал вывод с таблицы (поезда), и там где идут поля и id_st2 надо чтоб была информация которая находится в таблице (станция) их я пытался связать по вот этому полю. id_stanciya

Спустя 32 минуты, 36 секунд (6.03.2011 - 16:31) Trianon написал(а):
И что, echo $row1["s1_t_ru"]; ничего не показывает?

Спустя 3 часа, 56 минут, 8 секунд (6.03.2011 - 20:28) kolyabis написал(а):
Да помогло, я там просто немного не внимателен был, не то поставил в цикл, остался один маленький ньюанс, и когда закончу выложу тут полный варианс со всеми изменениями.

Спустя 14 минут, 9 секунд (6.03.2011 - 20:42) kolyabis написал(а):
Подскажите пожалуйста еще такой ньюанс, в каком месте нужно в таком запросе ставить условие, вот такое,

WHERE `cod_id`=".intval($_GET['cod_id']));

И правильное ли условие, для такого запроса???

Спустя 2 часа, 3 минуты, 2 секунды (6.03.2011 - 22:45) Trianon написал(а):
Ставить в хвост, последней строкой.
Условие корректное.

Спустя 1 час, 57 минут (7.03.2011 - 00:42) kolyabis написал(а):
если я ставлю в конец запроса этот код ( WHERE `cod_id`=".intval($_GET['cod_id'])); )

То мне вылазит сразу ошибка.
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in Z:\home\raspisanie\www\dorogi.php on line 91

Спустя 12 минут, 14 секунд (7.03.2011 - 00:54) twin написал(а):
Для `cod_id` нужно обозначить принадлежность. Вообще, если запрос для тебя сложен, проверяй его сначала в PMA, либо используй or die()

Спустя 7 минут, 44 секунды (7.03.2011 - 01:02) Dron19 написал(а):
Эта ошибка говорит, что у тебя не правильный запрос, то есть некорректный, в добавок он кривой, то есть не безопасный.

Спустя 48 минут, 2 секунды (7.03.2011 - 01:50) kolyabis написал(а):
Вот так это полностью рабочий вариант.

<table width="90%" border="1" align="center">
<
tr align="center">
<
td>№ поезда</td>
<
td>Начальная станция</td>
<
td>Конечная станция</td>
<
td>Дата/время отправки</td>
<
td>Дата/время прибытия</td>
<
td>Маршрут</td>
</
tr>
<?php
$sql1 = mysql_query("SELECT
p.`id_st1`, p.`id_st2`, p.`cod_id`, p.`id_poizda`, p.`time_otp`, p.`time_pri`, p.`marshrut`,
s1.`trasa_ua` AS s1_t_ua, s1.`trasa_ru` AS s1_t_ru,
s2.`trasa_ua` AS s2_t_ua, s2.`trasa_ru` AS s2_t_ru
FROM `uz_poezda` p
LEFT JOIN `uz_stanciya` s1 ON s1.id_stanciya = p.id_st1
LEFT JOIN `uz_stanciya` s2 ON s2.id_stanciya = p.id_st2 WHERE p.`cod_id`="
.intval($_GET['cod_id']))or die(mysql_error());
//Выводим в цикле из базы коды и названия дорог, с возможностью переключения языка.
while ($row1 = mysql_fetch_array ($sql1)) {
echo '<tr align="center">
<td><a href="dorogi.php?cod_id='
.$row1['cod_id'].'&lang='.$_LNG.'">'.$row1['id_poizda'].'</a></td>
<td><a href="dorogi.php?cod_id='
.$row1['cod_id'].'&lang='.$_LNG.'">'.$row1['s1_t_ua'].'</a></td>
<td><a href="dorogi.php?cod_id='
.$row1['cod_id'].'&lang='.$_LNG.'">'.$row1['s2_t_ua'].'</a></td>
<td>'
.$row1['time_otp'].'</td>
<td>'
.$row1['time_pri'].'</td>
<td><a href="dorogi.php?cod_id='
.$row1['cod_id'].'&lang='.$_LNG.'">'.$row1['marshrut'].'</a></td>
</tr>'
;
}

?>
</table>

Спустя 1 минута, 2 секунды (7.03.2011 - 01:51) kolyabis написал(а):
Всем огромное спасибо за помощь.

Спустя 6 часов, 22 минуты, 33 секунды (7.03.2011 - 08:13) twin написал(а):
Вот здесь
while ($row1 = mysql_fetch_array ($sql1))
лучше использовать mysql_fetch_assoc()

Спустя 1 час, 22 минуты, 29 секунд (7.03.2011 - 09:36) Trianon написал(а):
где это творение обрело зависимость от языка - не вижу совсем.
Вижу, что выводится только украинское название.

Спустя 9 часов, 47 минут, 58 секунд (7.03.2011 - 19:24) kolyabis написал(а):
По поводу Украинского вы правы, на данном этапе выводится только украинский, но самое главное что запрос уже работает, а проверить украинский или рискуй, это уже не трудно сделать.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.