Есть код, в котором в цикле должна выводится информация о поездах, запрос к базе в этом коде соединенный с двух таблиц, так как в таблице ( станции ) находится информация о станциях с их названиями, а в таблице ( поезда ) информация о маршруте, начальной и конечной остановке, только начальная и конечная, это уникальный 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
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'
Unknown column 'uz_stanciya.id_stanciya' in 'field list'
Спустя 7 минут, 30 секунд (5.03.2011 - 23:33) Trianon написал(а):
Поскольку требуется выдернуть информацию о двух разных станциях относящихся к одному поезду, потребуется соединить три таблицы: одну "поезда" и две копии таблицы "станция" примерно таким запросом.
Попробуйте выполнить его отдельно, посмотреть, какие столбики и данные он возвращает.
После этого поймете, как вывести данные на стороне php-приложения.
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
[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 - их выводить.
Какие именно поля нужны - полностью определяется сутью скрипта и набором столбиков в таблицах.
Я выбрал лишь те поля, кторые присутствовали в Вашем исходном 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 я связал
Так вот, в цикле, там где я писал вывод с таблицы (поезда), и там где идут поля и id_st2 надо чтоб была информация которая находится в таблице (станция) их я пытался связать по вот этому полю. id_stanciya
Структура таблицы `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']));
И правильное ли условие, для такого запроса???
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
То мне вылазит сразу ошибка.
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 написал(а):
По поводу Украинского вы правы, на данном этапе выводится только украинский, но самое главное что запрос уже работает, а проверить украинский или рискуй, это уже не трудно сделать.