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

Форум MySQL

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

 

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

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

тема: Выборка по факту сравнения порядка
 
 автор: vadimka   (16.01.2011 в 15:50)   письмо автору
 
 

идет выборка order by из таблицы по трем полям - время, сутки, конечная станция.
Выводятся два "station_id" в том порядке, который мне нужен.
Можно ли сделать новую выборку, где можно было сравнить номер порядка выборки в первом запросе
по смыслу:
{$order[]=$row[id_station];}
$order[0] один id_station
$order[1] - другой  id_station
where (порядок вывода)>(порядок другого вывода) 

  Ответить  
 
 автор: Trianon   (16.01.2011 в 15:54)   письмо автору
 
   для: vadimka   (16.01.2011 в 15:50)
 

а попроще можно объяснить?
И желательно без неоднозначностей, когда сидишь и гадаешь station_id и id_station - это два разных поля, или опечатка.

  Ответить  
 
 автор: vadimka   (17.01.2011 в 00:19)   письмо автору
 
   для: Trianon   (16.01.2011 в 15:54)
 

:) виноват, сам пытаюсь осознать как спросить

  Ответить  
 
 автор: cheops   (16.01.2011 в 18:34)   письмо автору
 
   для: vadimka   (16.01.2011 в 15:50)
 

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

  Ответить  
 
 автор: vadimka   (17.01.2011 в 00:21)   письмо автору
 
   для: cheops   (16.01.2011 в 18:34)
 

есть таблица с "поездами", с "станциями" и станциями "поезда"
из формы приходят номера станций: от и куда.
выбрать все поезда, где присутствуют оба номера не проблема, а вот определить направление...

  Ответить  
 
 автор: Trianon   (17.01.2011 в 00:24)   письмо автору
 
   для: vadimka   (17.01.2011 в 00:21)
 

примерчик , это операторы CREATE TABLE и по нескольку строк INSERT INTO для каждой из таблиц.
Плюс ожидаемый от запросе результат.

  Ответить  
 
 автор: vadimka   (17.01.2011 в 00:42)   письмо автору
 
   для: Trianon   (17.01.2011 в 00:24)
 

CREATE TABLE `stations_of_poezd` (
  `id_station_of_poezd` int(11) NOT NULL auto_increment,
  `id_station` int(11) NOT NULL,
  `time_end` time default NULL,
  `time_start` time default NULL,
  `sutki` set('0','1','2','3') NOT NULL default '0',
  `id_poezd` int(5) NOT NULL,
  PRIMARY KEY  (`id_station_of_poezd`)
  ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0 ;
INSERT INTO `stations_of_poezd` VALUES (1, 4, '01:02:00', '01:28:00', '0', 0);
INSERT INTO `stations_of_poezd` VALUES (7, 10, '05:20:00', '05:27:00', '0', 2);
INSERT INTO `stations_of_poezd` VALUES (3, 6, '03:44:00', '03:46:00', '0', 1);
INSERT INTO `stations_of_poezd` VALUES (6, 8, '04:47:00', '04:54:00', '0', 1);
INSERT INTO `stations_of_poezd` VALUES (5, 7, '03:12:00', '03:14:00', '0', 1);

CREATE TABLE `poezd` (
  `id_poezd` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
 PRIMARY KEY  (`id_poezd`)
 )ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0 ;

выборка для примера (если станция конечная то время 00:00:00 водится параметр new):
SELECT *,(CASE WHEN time_start ='00:00:00' THEN 1 ELSE 0 END) AS new
FROM stations_of_poezd
WHERE id_poezd = '$id_poezd' 
ORDER BY sutki ASC, new ASC, time_start ASC 

теперь, приходят из формы две переменные:
$otkuda и $kuda, которые соответствуют двум id_station
нужно найти поезда, где присутствуют обе переменные($otkuda и $kuda ) это не проблема.
Но нужно найти направление - т.е. те поезда где одна из станций идет первой...

астоинкремент - не подходит так как станции могут добавлятся...

  Ответить  
 
 автор: Trianon   (17.01.2011 в 00:53)   письмо автору
 
   для: Trianon   (17.01.2011 в 00:24)
 

to vadimka (17.01.2011 в 00:42)

1. Исправьте, пожалуйста, запрос так, чтобы он не рвал окно в горизонтальный скроллинг.
На пост намеренно не отвечаю, чтобы Вы могли скорректировать текст.

2. эти самые id_station и id_station_of_poezd как-то соответствуют time_start и time_end?
Что это вообще за поля? Что они означают?
3. Опять же, что описывает вся строка таблицы?

  Ответить  
 
 автор: vadimka   (17.01.2011 в 11:17)   письмо автору
 
   для: Trianon   (17.01.2011 в 00:53)
 


SELECT *,
(CASE WHEN time_start ='00:00:00' 
THEN 1 ELSE 0 END) AS new 
FROM stations_of_poezd 
WHERE id_poezd = '$id_poezd'  
ORDER BY sutki ASC, 
new ASC, 
time_start ASC 

это только для того чтобы выстроить по порядку
станции какого-либо поезда
2) id_station_of_poezd -
первичный ключ таблицы "станций
конкретного поезда",
id_station - внешний ключ, ведет к таблице "станций"
(от туда береться название станции),
time_start и time_end - время отбытия и
прибытия на конкретную станцию (id_station_of_poezd)
како-го то поезда
б) id_station также содержится в форме, где формируется
запрос id_station - откуда и id_station - куда
3) строка таблицы "станции поезда"
содержит одну станцию относительно одного поезда,
время прибытия и отбытия
(если станция начальная или конечная то - '00:00:00'),
поле сутки ('0','1','2','3') т.е если какая-то
станция стартует 23-00 то станции после 24-00
добавляют в поле сутки '1' последующие станции,
после следующих 24-00 - в поле сутки ставится '2'
и т.п.

  Ответить  
 
 автор: Лена   (17.01.2011 в 11:45)   письмо автору
 
   для: vadimka   (17.01.2011 в 11:17)
 

Перевожу на русский язык. :)
stations_of_poezd - таблица-связка, связывает конкретный поезд - id_poezd с конкретной станцией - id_station.
Пришел поезд на станцию - в таблицу пишется его время прихода - time_start,
ушел со станции - пишется время отправления time_end.
К чему здесь sutki я так и не поняла.
(если станция начальная или конечная то - '00:00:00') - Почему? Поезд не может всегда приходить или уходить в 00:00:00, сюда реальное время надо писать, тогда надобность в поле sutki вообще отпадет.

Что вам нужно выбрать из этой таблицы? До сих пор непонятно.
Я так поняла - вам нужно для каждого поезда выбрать в нужно порядке все его станции. Проясните, пожалуйста, ситуацию.

  Ответить  
 
 автор: vadimka   (17.01.2011 в 11:55)   письмо автору
 
   для: Лена   (17.01.2011 в 11:45)
 

это расписание:
станции есть вообще, а - есть у каждого поезда
вот представте станция конечная: есть время прибытия,
но нет времени отбытия - '00:00:00'
если первая станция отбытие 23-45
вторая 1-45 то как и сортировать?
получается вторая пойдет первой.
а так первая имеет не только время 23-45
но и поле сутки - 0
вторая время имеет меньше, но поле сутки - 1
станция отправления, имеет поле прибытие - '00:00:00'
мне нужно высчитать здесь имея из формы
две переменные "отбытия" и "прибытия".
Высчитать те поезда в которых они присутствуют. это не проблема.
А найти направление движения, т.е. только те поезда где
одна станция из двух при той сортировке, которую я привел
стоит раньше второй

  Ответить  
 
 автор: Косорылый   (17.01.2011 в 13:04)   письмо автору
201 Кб
 
   для: vadimka   (17.01.2011 в 11:55)
 

Если есть значения в поле отправления ,а в поле прибытия нет -то это начальная станция
Если есть значения в поле прибытия ,а в поле отправления нет -то это конечная станция
Как это сравнивать время только по часам и минутам ?
наверно есть полная дата расписания ,где есть год, месяц, день и время ?
вот этот формат и позволит точно построить график (ну часовой пояс и смену летнее -зимнее время не забыть)

Нашел в нете документ ,может что-то и пригодится

  Ответить  
 
 автор: vadimka   (20.01.2011 в 11:49)   письмо автору
 
   для: Косорылый   (17.01.2011 в 13:04)
 

Спасибо всем!
Решил сделать так: делаю новое поле "порядок" в таблице станций поезда.
при вставке или редактировании станции поезда делается селект из обновленной теблицы станций этого поезда.
выводятся номера станций поезда в том порядке, который я указывал.
Загоняется в массив
$newarr[]=($row[id_station_of_poezd]);

после
foreach($newarr as $poryadok=> $id_station_of_poezd1){
  echo     "порядок:".$poryadok."=".$id_station_of_poezd1."<br>";
 $sSQL = "UPDATE stations_of_poezd SET
          poryadok  = '$poryadok'
           WHERE
          id_station_of_poezd='$id_station_of_poezd1'";

  Ответить  
 
 автор: Trianon   (20.01.2011 в 12:30)   письмо автору
 
   для: vadimka   (20.01.2011 в 11:49)
 

а ведь куда проще было бы хранить время, как смещение в секундах от момента отправления рейса с начальной станции. По нему же и сортировать.

  Ответить  
 
 автор: vadimka   (20.01.2011 в 12:41)   письмо автору
 
   для: Trianon   (20.01.2011 в 12:30)
 

точно, не подумал...

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

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