Forum Webscript.Ru
Общие => Базы данных => Тема начата: КубанГ от 30 Августа 2004, 15:50:58
Привет всем. Вопрос такой: мне нужно, чтобы скрипт вытащил из БД все строки, где в столбце DATE (VARCHAR, NOT NULL) есть слово, допустим, АВГУСТ. Т.е., по большому счёту, это скрипт архива новостей, выводящий все сообщения за определённый месяц. Проблема в том , что он этого не делает. Информация вносится в столбец таким образом: ">, где $nowday, например это $nowday = date_time_array[\'mday\']; У меня есть мысль, что я сделал что-то неправильно уже на этапе создания таблицы, а именно: для моих целей нужно было создать столбец определённого типа, но я пробовал добавлять столбцы MONTH(DATE), но, так или иначе, всегда строка имеет значение 0000-00-00, хотя я и пытался внести в неё информацию тем же способом, что и в DATE, но мне кажется что MySQL должна автоматически добавлять дату (только месяц, допустим), но тогда, как это сделать? И как сделать к нему правильный запрос, чтобы он выводил все сообщения за указаный месяц? Запрос скрипту направляется с помощью такого кода:Август И всё это при том, что когда запрашиваешь столбец ID (TINYINT, DEFAULT \'0\' NOT NULL AUTO_INCREMENT) таким же образом, но с изменением, например, ?id=100, то он исправно выдаёт строку, где id равен 100. Кстати, указать для типа DATE autoincrement мне не удалось.На всякий случай, скрипт такой:if ($month){ $result = mysql_query ("SELECT * FROM new WHERE id=$month", $db); $myrow = mysql_fetch_array ($result); printf ("Date: %s\\n", $myrow["date"]); }Простите, что так много пришлось написать, но мне бы хотелось понять, как подобные штуки работают, а я в этом пока мало что понимаю и потому хотел предоставить всю полезную (на мой взгляд) информацию.Заранее, спасибо.Да, чуть не забыл: а как заставить БД выдавать результат в порядке убывания, т.е. от последнего к первому. Ещё раз спасибо.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Меняздесьдавнонет от 30 Августа 2004, 16:10:03
ЦитироватьКубанГ:Да, чуть не забыл: а как заставить БД выдавать результат в порядке убывания, т.е. от последнего к первомув твоем случае - никакдату надо хранить в поле специально предназначенного для этого формата.Только после того, как ты это сделашь, имеет смысл говорить о чем -то еще.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Меняздесьдавнонет от 30 Августа 2004, 16:20:56
тебе надо понять сначала одну вещь.Что данные оне обязаны и не должны в базе храниться в том виде, вк котором тебе их нужно отображать.В базе данные должны храниться в том виде, который удобен для хранения.А потом,при выводе, их можно будет преобразовать к любому виду.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: КубанГ от 30 Августа 2004, 16:21:17
дату надо хранить в поле специально предназначенного для этого форматаБлин, как тут цитату вставлять?Ага, понятно (то есть не совсем), но вот только КАКОЕ это поле (если ты говоришь про TYPE для столбца, то я пытался выставлять и DATE и TIME, и всё остальное, связанное с временем). Или я что-то не понял.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Меняздесьдавнонет от 30 Августа 2004, 16:27:19
вот "вставь". точнее создайтаблицу с полем типа Dateи вставь туда значение В ТОМ ФОРМАТЕ, в котором оно должно быть.или ты думаешь, что базе можно писать что угодно, например, "5 термидора года 6548 от сотворения мира", а она сама догадается ,что ты имел в виду?
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: CGVictor от 30 Августа 2004, 16:31:03
КубанГ As for me, то я храню просто timestamp. А в коде из него можно сделать все, что угодно.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Croaker от 30 Августа 2004, 16:53:02
КубанГ Если у тебя дата хранится как 0000-00-00, то и вставлять ее надо, соотвественно, как ГГГГ-ММ-ДД (2004-08-30).
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: КубанГ от 30 Августа 2004, 18:08:38
Ну хорошо, спасибо, есть над чем поработать.RomikChefВообще-то да, я так и думал, что в базу можно писать, что угодно и потом с этим работать, но теперь вижу, что был не прав -- каюсь. :)Может тогда перейдём к вопросу о сортировке?CGVictor Кстати timestamp и в правду что-то пишет :). Вопрос в догонку. Значит теперь я могу написать на что-то в роде value="from=20040830184543;to=200450830184543" и я получу желаемый результат, т.е. всю информацию из базы в заданый промежуток времени?CroakerУгу, понятно. Значит я делаю так value="", верно? Тогда подскажи пожалуйста, что надо вставлять вместо этих yyyy mm dd. Хех. Я нашёл как цитату вставлять!
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Croaker от 30 Августа 2004, 18:14:06
КубанГ Сделай просто echo date( \'yyyy mm dd\', time() );и посмотри - дата выводится в том формате, который тебе нужен (ДДДД-ММ-ГГ), или нет.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: commander от 30 Августа 2004, 18:29:22
КубанГ не пробовал localtime вставлять? удобнее...
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Меняздесьдавнонет от 30 Августа 2004, 19:00:19
КубанГ тебе не стоило слушать CGVictor-aпо многим причинам.часть этих причин - в тебе, часть - в нем, часть - в твоей задаче.плюс, скорее всего, он имел в виду совсем другой таймстамп.Не надо бегать от одного способа к другому, только потому, что досужий прохожий тебе что-то на форуме наплел.ЭТОТ таймстамп тебе не годится.вернись к dateИли возможность того, что тебе не надо трудиться и вставлять дату самому, затмевает тебе разум?Ну так я тебе покажу, как вставлять дату автоматом и в поле тип date. Хотя, я, конечно, не видел ни разу в жизни новостной скрипт, в котором не было бы возможности поставить дату руками.к вопросу о сортировке переходить нечего - просто пишешь в запросе SELECT * FROM new ORDER BY date DESC и все.Тебе следует посмотреть примеры каких-нибудь простых скриптов для работы с базой данных - там ничего сложного, практически натуральный английский язык.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: commander от 30 Августа 2004, 19:10:37
RomikChef http://forums.webscript.ru/showthread.php?s=&postid=114330#post114330на удивление четкая формулировка... ;)
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Меняздесьдавнонет от 30 Августа 2004, 19:27:20
кабы здесь было поменьше роботов-ламеров, у которых горит влезть в любую тему, где они увидели знакомую букву, гладишь, и роботов -флеймеров было бы поменьше.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: КубанГ от 30 Августа 2004, 20:17:36
commanderЧто-то я попытался с ней разобраться -- не получилось в мануале непонятно описано: array localtime ( [int timestamp [, bool is_associative]])RomikChefДа нет, я не бегаю, просто проверяю варианты, и потом разве я не узнал, что timestamp устанавливает дату и время занесения инфы в базу?;) Хотя ты говорил, что CGVictor имел в виду что-то другое... Может быть этот самый timestamp из localtime?А с date -- да, я разобрался, то есть понял как "вставлять время в формате" базы. echo date(\'Y-m-d\', time()); -- на заметку, кстати, Croaker\'у, а то когда вставляешь yyyy mm dd, то получается примерно следующее: 04040404 0808 3030.:)Ну что ж, видимо дальше я с этой проблемой сам смогу разделаться коли стало понятно, что ошибка возникла уже на стадии планирования и заключалась в первую очередь в неверном выборе средств решения задачи (основа чему -- незнание), во всяком случае до тех пор, пока снова не вляпаюсь во что-нибудь, а пока дорога ясна. Хотя может быть вы можете мне ещё что-нибудь посоветовать?Спасибо всем за помощь.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: КубанГ от 30 Августа 2004, 20:27:57
RomikChefЦитироватьRomikChef:Хотя, я, конечно, не видел ни разу в жизни новостной скриптДа, я тоже, знаешь, не видел, но, согласись, очень удобно для создателя сайта, когда скриптом пользуется множество человек и жёсткая фиксация даты даёт возможность устанавливать единый "шаблон" что ли, а то, действительно, получится "5 термидора года 6548 от сотворения мира" у одного, и солидная дата у другого. Да-а, чувствую, что моё сообщение не в тему про новостные скрипты... ;)
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Меняздесьдавнонет от 30 Августа 2004, 20:30:14
ты забыл свой самый первый вопрос.SELECT * FROM new WHERE month(date)=\'8\' AND year(date)=\'2004\' ORDER BY date DESC Еще не для твоего случая, а вообще, я тебе порекомендую почитать http://phpfaq.ru/slashers
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Меняздесьдавнонет от 30 Августа 2004, 20:33:28
еслиЦитироватьпользуется множество человек то следует вводить проверку правильности ввода даты и не добавлять запись а фозвращать форму на редактирование.единый шаблон ты устанавливаешь при этом сам, введя, к примеру, отдельные поля для месяца для и года а потом в скрипте соединив их нужным образом.собственно, эти вопросы никак не связаны - формат ыввода и формат хранения.если же ты хочешь таки вставляь дату автоматом, то пхп тебе все равно не нужен - воспользуйся функцией now() запросе
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Меняздесьдавнонет от 30 Августа 2004, 20:34:53
вообще-то, я бы тебе порекомендовал прочесть http://phpfaq.ru целиком, кроме, пожалуй, сессий.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: commander от 31 Августа 2004, 09:13:58
КубанГ под localtime я подразумевал кол-во секунд от начала 1970 года... Ещё известное как unix time... и не нужно никаких там форматов date достаточно просто int... Сортировки, выборки делаються легко и не принужденно... Вообщем тебе конечно решать... но я бы посоветовал именно эту форму хранения дат...
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Меняздесьдавнонет от 31 Августа 2004, 10:33:52
КубанГ, как видишь, этот досужий обыватель настолько не понимает, о чем говорит, что даже назвать правильно не может.К сожалению, ты должен четко понимать одну вещь - у большинства тех, кто лезет тебе отвечать, урвоень знаний не отличается от твоего, а всего лишь черезвычайно завышенное самомнение.Можно, действительно, хранить время в формате unixtime. Я и сам так иногда делаю. НО, тебе, в данной ситуации, удобнее работать с полем date и - что ГОРАЗДО важнее - научиться работать именно с базой. А не метаться из стороны в сторону.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Forza от 31 Августа 2004, 12:50:10
ЦитироватьRomikChef:а всего лишь черезвычайно завышенное самомнение[OFF]Понимаю, что флейм, и меня вырежут. Но не могу не удержаться: говорим "черезвычайно завышенное самомнение" - подразумеваем "RomikChef", говорим "RomikChef" - подразумеваем "черезвычайно завышенное самомнение". ;) [/OFF]
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Меняздесьдавнонет от 31 Августа 2004, 12:58:04
К слову, словом timestamp в данном контексте, называются две совершенно разные вещи, что многих сбивает с толку.В общепринятом смысле под timestamp подразумевается unix timestamp - очень удобная, но ограниченная система работы со временем, базирующаяся на количестве секунд, прошедших с 1 января 1970 года. главное ее достоинство в том, что она позваоляет свободно работать с датой и временем в языках, в которых нет специального типа для них.в mysql же timestamp - это особенный тип поля, который тебе совершенно не подходит. Ибо он хранит не дату, которую ты ввел, а изменяется каждый раз, когда ты редактируешь запись. Автоматически.то есть, если в новости за 1 сентябра нашли ошибку второго и исправили, то она станет новостью от 2 сентября, что, согласись, не очень хорошо.К слову сказать в mysql есть встроенные средства перевода из unix timestamp в о внутренний формат и наоборот.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: CGVictor от 31 Августа 2004, 13:03:38
RomikChef Ромик, серьезно, а чем тебе не нравится stamp? Если говорить о чистоте вопроса - то да, date. Но ведь stamp само по себе уже содержит и дату и время, а используются они обычно вместе...КубанГ Я действительно имел в виду немного другой stamp. Классический unix`овский. А timestamp при занесении в базу тебе немного чем поможет.А про date("Y-m-d",time()); тебе уже подсказали.
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: Меняздесьдавнонет от 31 Августа 2004, 13:27:29
ЦитироватьCGVictor:А про date("Y-m-d",time()); тебе уже подсказали.вообще-то, это, в данном контексте, совершенно лишнее.Я, КАЖЕТСЯ уже написал, как вставлять текущую дату прямо в запросе. Равно, как и о том, что в скрипте новостей автоматом дату никто не вставляет.Чем мне не нравится юниксовый стамп в данном контексте - пояснил.повторяться нет никакого желания.
SMF 2.0.19 |
SMF © 2016, Simple Machines