Общие => Базы данных => Тема начата: КубанГ от 30 Августа 2004, 15:50:58
Название: БД, вытащи все строки, где в столбце Х есть информация Y
Отправлено: КубанГ от 30 Августа 2004, 15:50:58
Привет всем. Вопрос такой: мне нужно, чтобы скрипт вытащил из БД все строки, где в столбце DATE (VARCHAR, NOT NULL) есть слово, допустим, АВГУСТ. Т.е., по большому счёту, это скрипт архива новостей, выводящий все сообщения за определённый месяц. Проблема в том , что он этого не делает. Информация вносится в столбец таким образом: ">, где $nowday, например это $nowday = date_time_array[\'mday\']; У меня есть мысль, что я сделал что-то неправильно уже на этапе создания таблицы, а именно: для моих целей нужно было создать столбец определённого типа, но я пробовал добавлять столбцы MONTH(DATE), но, так или иначе, всегда строка имеет значение 0000-00-00, хотя я и пытался внести в неё информацию тем же способом, что и в DATE, но мне кажется что MySQL должна автоматически добавлять дату (только месяц, допустим), но тогда, как это сделать? И как сделать к нему правильный запрос, чтобы он выводил все сообщения за указаный месяц? Запрос скрипту направляется с помощью такого кода:
Название: БД, вытащи все строки, где в столбце Х есть информация 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()); тебе уже подсказали.
вообще-то, это, в данном контексте, совершенно лишнее. Я, КАЖЕТСЯ уже написал, как вставлять текущую дату прямо в запросе. Равно, как и о том, что в скрипте новостей автоматом дату никто не вставляет.
Чем мне не нравится юниксовый стамп в данном контексте - пояснил. повторяться нет никакого желания.