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

TheRealKos

Новичок
Доброго времени суток. В общем не получается отсортировать по дате (так и выдает все результаты, которые есть в базе, при этом в phpMyAdmin запрос происходит нормально). Так же происходит запрос нормально аналогично с другими пунктами (семестр предмет, группа). Единственно отличие "даты", это то что она передается через выпадающий список.

Вот код (своеобразное меню):
PHP:
echo "Семестр<br>";
//вот тут дата
echo "<form name='form1' method='GET' action='index.php' method='GET'>";
echo "<br><br>";
$sql55 = "SELECT * FROM `years` ORDER BY `year`";
$result_select55 = mysql_query($sql55);
echo "<select name = 'year' onChange='form1.submit()'>";
echo "<option selected disabled>Можно выбрать период обучения...";
while($object = mysql_fetch_object($result_select55)){
echo "<option value = '$object->year'>$object->year</option>";
}
echo "</select><br><br>";
echo "</form>";

//дальше идет выборка семестра, предмета, группы, но она не в выпадающем списке
Вот следующие запросы:
PHP:
//вот здесь почему-то выборка с датой не работает...
if (isset($_GET['year']))
{ echo "Фильтр <br> Дата: ".$_GET['year'];
$resource= mysql_query('SELECT * FROM `files`, `users` WHERE `users`.`type_users` = "Студент" AND `files`.`year` LIKE "%'.$_GET['year'].'%" AND `files`.`poluchatel_file` = `users`.`id` ORDER by `users`.`group`',$db);
}

//следующие работают
Собственно, почему так?


Подсказали, что возможно из-за того, что в запросе получается так: 2013/2014, что слэш нужно экранировать, вот только как? Ведь 2013/2014 и т.д. идут в GET запросе...
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
В этой каше тут никто разбираться не будет. Отдели не работающий запрос от php и тебе подскажут.
 

hell0w0rd

Продвинутый новичок
TheRealKos, я тебя прошу отделить SQL от PHP, ты упорно суешь мне php.
$_GET['year'] - вот тут может быть что угодно, вплоть до -- DROP TABLE users;
Советую внимательно прочитать http://phpfaq.ru/slashes
Ты год в строке хранишь? Зачем его LIKE-ом искать?
Ты понимаешь, что from table, table2 - это синтаксический сахар для cross join, который почти никогда не нужен?
 

TheRealKos

Новичок
hell0w0rd, $_GET['year'] - здесь у меня передаются данные в таком виде: 2011/2012, 2012/2013 и т.п.
Хранится в VARCHAR, сравнение с utf8_general_ci.
Даже если делать строгое сравнение, все равно ни чего не происходит...
 

hell0w0rd

Продвинутый новичок
TheRealKos, прочитай вторую часть моего сообщения.
Числа нужно хранить в числах. Если передается всегда два числа - есть оператор between, если больше - есть оператор in. Но не like, он тут не к месту.
 

TheRealKos

Новичок
hell0w0rd, они же передаются в таком виде 2012/2013 (т.е. число слеш число) и в каком тогда формате лучше хранить в БД?
 

hell0w0rd

Продвинутый новичок
TheRealKos, в int. Задача php - показать данные из базы. Для этого нужно модифицировать данные из запроса клиента, в запрос к базе. В данном случае тебе нужно из строки выцепить два года и вставить в запрос.
 

TheRealKos

Новичок
hell0w0rd, БД не дает в int сохранить значение вида 2012/2013.
А в ячейке у меня должно храниться именно в таком виде...
 

hell0w0rd

Продвинутый новичок
TheRealKos, А что вообще это значит? 2012/2013? ну создай два поля, или отдельную таблицу
 

hell0w0rd

Продвинутый новичок
TheRealKos, ну ты можешь делать как хочешь - твое право. Но на мой взгляд это не правильно. В дальнейшем твой вариант будет только мешать, учитывая что like - дорогая операция, потому что всегда требует полный перебор базы, на сколько я знаю.
Ну и помимо года можно хранить конкретную дату, например.
 

TheRealKos

Новичок
hell0w0rd, ну вот без LIKE (буду либо = либо BEETWEEN использовать). Но вот как сделать выборку, чтобы нормально работало с таким видом: 2012/2013 (и это одна ячейка в базе).
 

hell0w0rd

Продвинутый новичок
TheRealKos, я так и не понял что ты выбрать хочешь в запросе своем. И что значит "не работает".
Пока я могу сказать только то, что ты используешь cross join, который тебе скорее всего не нужен.
 

TheRealKos

Новичок
hell0w0rd, нужно выбрать те записи где год(из таблицы файл) = 2012/2013 (или 2013/2014 зависимости от выбора) И тип_пользователя (из таблицы юзерс) = Студент И получатель_файла из таблицы файл) = айди (из таблицы юзерс)

НУ если еще проще, то выбрать записи, где поле year = 2012/2013 (или 2013/2014 зависимости от выбора).

А не работает, означает что вместо определенных результатов выдает ВСЕ, Проверял запрос в phpMyAdmin там такая конструкция работала...
 
Сверху