[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Get или POST что выбрать для поиска ?
Bossmen
Get или POST что выбрать для поиска по сайту какой метод лучше ?



Спустя 3 минуты, 35 секунд (5.01.2011 - 16:51) inpost написал(а):
Гугл выбрал GET. =) И я тебе советую =)

Спустя 57 секунд (5.01.2011 - 16:51) Invis1ble написал(а):
Bossmen
Я где-то читал, что предпочтительней гет, т.к. можно кинуть ссылку другу например на результаты поиска...

Спустя 48 секунд (5.01.2011 - 16:52) amazing написал(а):
GET вполне хорошо справляется с поиском.

Спустя 1 минута, 16 секунд (5.01.2011 - 16:54) Bossmen написал(а):
А пример сможете показать на php коде, то через post передаю таблице запрос а как через GET ??

вот форма

<form method="post" action="controler.php">
Имя<br>
<
input type="text" name="name_actors" value="<?php echo $_POST['name_actors'] ?>"><br>
Дата рождения<br>

<
select name="day">
<
option value="non">-День-</option>
<?php

$day = $_POST['day'];


for($i = 1; $i <= 31; $i++)
{
echo '<option value="'.$i.'" '.($day == $i?'selected="selected"':' ').'>'.$i.'</option>';
}
?>
</select>


<
select name="month">
<
option value="non">-Месяц-</option>
<
option value="01">Января</option>
<
option value="02">Февраля</option>
<
option value="03">Марта</option>
<
option value="04">Апреля</option>
<
option value="05">Мая</option>
<
option value="06">Июня</option>
<
option value="07">Июля</option>
<
option value="08">Августа</option>
<
option value="09">Сентября</option>
<
option value="10">Октября</option>
<
option value="11">Ноября</option>
<
option value="12">Декабря</option>
</
select>


<
select name="year">
<
option value="non">-Год-</option>
<?php


$year = $_POST['year'];


for($i = date('Y'); $i >= 1933; $i--)
{
echo '<option value="'.$i.'" '.($year == $i?'selected="selected"':' ').'>'.$i.'</option>';
}
?>
</select>
<
br>
<
input name="avatar" type="submit" value="отправить">
</
form>

а а вот код

function people ($name_actors,$year)
{

$query = "SELECT * FROM tabl_people WHERE rus_name = '$name_actors' or orig_name = '$name_actors' or year = '$year' ";
$result = mysql_query($query);



while($myrow = mysql_fetch_assoc($result))
{
include './tabl.tpl';
}

}


Спустя 4 минуты, 36 секунд (5.01.2011 - 16:58) inpost написал(а):
method="post" меняешь на method="GET", далее работаешь уже с $_GET, вместо $_POST. И, я надеюсь, ты не забываешь инициализировать переменные?! ($id = $_GET['id']), если забываешь, посмотри мою последнюю подпись.

Спустя 4 минуты, 15 секунд (5.01.2011 - 17:02) Bossmen написал(а):
А как из гет передавать, с помощью ссылки ??
получишь запрос и потом передать в адресную строку а потом выводить из таблицы?

Спустя 1 минута, 12 секунд (5.01.2011 - 17:04) inpost написал(а):
Форма, нажимаешь SUBMIT!

Спустя 2 минуты, 51 секунда (5.01.2011 - 17:06) Bossmen написал(а):
все понял))

Спустя 1 минута, 41 секунда (5.01.2011 - 17:08) Bossmen написал(а):
extract ($_GET);
а так можно?

Спустя 59 минут, 44 секунды (5.01.2011 - 18:08) Bossmen написал(а):
???

Спустя 5 минут, 18 секунд (5.01.2011 - 18:13) Зарегестрирований написал(а):
Нет
У тебя есть ссыль
../index.php?search=imuseget
if (isset ($_GET['search']) && $_GET['search'] = "imuseget")
{echo "All good.Can Move!";}

Спустя 35 минут, 49 секунд (5.01.2011 - 18:49) inpost написал(а):
Зарегестрирований
Сравнивание равенства через == пробела, или ===, а не одно.

Спустя 19 минут, 15 секунд (5.01.2011 - 19:08) Зарегестрирований написал(а):
Да точно я быстро ляпал по клавиатуре и один символ вылетел с текста
Кстате давно хотел спросить какая разница между == и === ?
-----------------
И вот мой код
if (isset ($_GET['id']))
{
$idcat = $_GET['id'];
там все работает ТОЛЬКО при одном = при двух выводится ошибка
Это по томучто я приравниваю одну переменную к другой а не проверяю (равно ли) так ведь?

Спустя 15 минут, 18 секунд (5.01.2011 - 19:24) inpost написал(а):
Ага.
== - внешнее сравнение: $a = 5; $b = '5'; Они равны, так как значения 5 у обоих.
=== - внутреннее сравнение, они будет не равны, так как в первом - это числовое значение, а во втором - это уже текстовое значение.

Спустя 1 минута, 5 секунд (5.01.2011 - 19:25) Игорь_Vasinsky написал(а):
= - это равенство, как могут 2 строки ровняться друг другу???????

== и === - идентичность.

вот поэтому.

Сначало бы не плохо с логикой php ознакомиться - она в самом начале мнуала.

Торопиться в этом деле нельзя. что то пропустил и как итог - тупик.

Спустя 14 минут, 16 секунд (5.01.2011 - 19:39) Invis1ble написал(а):
Зарегестрирований
= - оператор присваивания
== - оператор сравнения (без учета типов)
=== - оператор эквивалентности (с учетом типов)

Спустя 2 минуты, 35 секунд (5.01.2011 - 19:41) Игорь_Vasinsky написал(а):
точнее не скажешь....

тока если про типы расписть ещёб.........

Спустя 3 минуты, 51 секунда (5.01.2011 - 19:45) GreatMax написал(а):
Цитата (Bossmen @ 5.01.2011 - 13:47)
Get или POST что выбрать для поиска по сайту какой метод лучше ?

Конечно GET, но его нужно хорошо фильтровать. Вырезать все символы кроме букв и цифр.

Спустя 3 минуты, 33 секунды (5.01.2011 - 19:49) Invis1ble написал(а):
Игорь_Vasinsky
типы - boolean, integer, float, null, string, array, object, resource.. Вроде все... почитай литературу

Спустя 1 минута, 31 секунда (5.01.2011 - 19:50) Bossmen написал(а):
а как вырезать из get не нужные значения допустим

http://sm/controler.php?name_actors=&day=n...%E0%E2%E8%F2%FC

мне нужно убрать из адресной строки year=0 есле она равна нулю?

Спустя 59 минут, 27 секунд (5.01.2011 - 20:50) Игорь_Vasinsky написал(а):
Цитата
типы - boolean, integer, float, null, string, array, object, resource.. Вроде все... почитай литературу


)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

да я блин читал и читаю... эт не для меня.


Цитата
а как вырезать из get не нужные значения


первый GET в адресной строке идёт после "?", остальные разделяются "&"

например:

http://www.google.ru/result.php?word=nude&name=ким&sekname=бесенджер


как видно:

$_GET['word'] = "nude";
$_GET['name'] = "ким";
$_GET['sekname'] = "бесенджер";


а это "...%E0%E2%E8%F2%FC"

Функция urldecode — Функция декодирует строку с URL, закодированную в безопасное представление

после обработки строки данной функцией вся кирилица преврещаеться в такую ерезь.

Функция urlencode - возвращает строку, в которой все не алфавитно-числовые символы (кроме -_.) заменены на знак процентов (%) с последующими двумя 16-ричными цифрами и пробелами, кодированными как знаки плюс (+). Она кодируется тем же способом, что и post данные WWW-формы, то есть как в типе носителя application/x-www-form-urlencoded.

Спустя 4 минуты, 14 секунд (5.01.2011 - 20:54) Invis1ble написал(а):
Игорь_Vasinsky
Цитата
эт не для меня

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

Спустя 47 минут, 20 секунд (5.01.2011 - 21:41) twin написал(а):
GreatMax
Цитата
Конечно GET, но его нужно хорошо фильтровать. Вырезать все символы кроме букв и цифр.
Что за хрень? С какого перепуга? А как я буду искать китайский текст?

Спустя 1 час, 34 минуты, 52 секунды (5.01.2011 - 23:16) Игорь_Vasinsky написал(а):
он просто торопился.. просто нужно обезапаситься.

Спустя 19 часов, 5 минут, 29 секунд (6.01.2011 - 18:22) Bossmen написал(а):
Я так не понял как удалить))

Спустя 15 минут, 42 секунды (6.01.2011 - 18:37) Invis1ble написал(а):
Bossmen
А зачем удалять? year=0 - это будет одним из параметров поиска

Спустя 1 час, 22 минуты, 25 секунд (6.01.2011 - 20:00) Bossmen написал(а):


$query = "SELECT * FROM tabl_people WHERE rus_name = '$name_actors' or orig_name = '$name_actors' and year = '$year' ";
$result = mysql_query($query);


как правильно построить поиск, допустим я извлекаю из get значение,
а оно помешается в запрос , а если год пустой то в запрос все равно отправляется и не чего не выводит потому что в запрос помещается пустое значение))

Спустя 13 минут, 56 секунд (6.01.2011 - 20:14) Invis1ble написал(а):
Bossmen
значит нужно запрос по другому составить. Примерно так:
$query = "SELECT * FROM tabl_people WHERE rus_name = '" . $name_actors . "' or orig_name = '" . $name_actors . "'";

if ($year != 0)
$query .= " and year = '" . $year . "'";

Спустя 1 час, 5 минут, 43 секунды (6.01.2011 - 21:20) Bossmen написал(а):
А если надо так же на дату и месяц ?

Спустя 5 минут, 31 секунда (6.01.2011 - 21:25) inpost написал(а):
Bossmen
вместо year -> date

Спустя 7 минут, 29 секунд (6.01.2011 - 21:33) Bossmen написал(а):

$query = "SELECT * FROM tabl_people WHERE rus_name = '" . $name_actors . "' or orig_name = '" . $name_actors . "'";

if ($year != 0)
$query .= " and year = '" . $year . "'";

if ($day != 0)
$query .= " and day = '" . $day . "'";


и так далее ?

Спустя 5 минут, 45 секунд (6.01.2011 - 21:38) Invis1ble написал(а):
Bossmen
можно и так, а можно красивее:
$query = "SELECT * FROM tabl_people WHERE rus_name = '" . $name_actors . "' or orig_name = '" . $name_actors . "'";

$date = array('year' => $year, 'month' => $month, 'day' => $day);

foreach ($date as $field => $value)
if ($value != 0)
$query .= " and " . $field . " = '" . $value . "'";

Спустя 1 минута, 22 секунды (6.01.2011 - 21:40) Bossmen написал(а):
А если у меня десять значений??

Спустя 1 минута, 47 секунд (6.01.2011 - 21:41) Bossmen написал(а):
Вы наверно не поняли у меня выводяться в список люди
и мне надо сделать сортировку
как в контакте сортировка людей http://vkontakte.ru/gsearch.php?from=people&basic=1&c[name]=1&sort=-1

если ты не выбираешь пораметр сортировки в адресной строке не появляеться

Спустя 26 минут, 45 секунд (6.01.2011 - 22:08) Invis1ble написал(а):
Bossmen
причем тут вконтакте? ) чем тебе не подходит вариант, описанный мной?

Спустя 4 минуты, 26 секунд (6.01.2011 - 22:13) Игорь_Vasinsky написал(а):
На самом деле... чё ты путаешь нас... сам же спрашивал что для поиска использовать.

И чё тя адресная срока пугает.. пускай видят что ты путёвый программист и знаешь что такое GET и динамические страницы.

только когда ты из GET вытягиваешь year, он не равен year, а равен $_GET['year'].

тоесть ты можешь задать переменную $year, которая равна $_GET['year'].

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

Спустя 1 минута, 28 секунд (6.01.2011 - 22:14) Игорь_Vasinsky написал(а):
Цитата
значит сделай проверку на то что в этой переменной могут быть тока цифры


попрвка:

не могут быть цифры, а является целым числом. во как.

Спустя 8 минут, 34 секунды (6.01.2011 - 22:23) Invis1ble написал(а):
Bossmen
там в вконтакте это через ajax вроде реализовано... Делай как я тебе показал и не морочь себе голову

Спустя 1 час, 11 минут, 56 секунд (6.01.2011 - 23:35) inpost написал(а):
Так, в познавательных целях: http://www.perkoka.ru/article/46/795.html

Спустя 8 минут, 46 секунд (6.01.2011 - 23:43) Игорь_Vasinsky написал(а):
гы............ внатуре.............

Спустя 5 минут, 40 секунд (6.01.2011 - 23:49) Invis1ble написал(а):
inpost
не, он другое вроде имеет ввиду... Там такая фишка, типа найти людей по определенным критериям - и список критериев... Юзер выбирает (или не выбирает) кликами определенные критерии и на лету формируется запрос в адресной строке, после которого выводится список людей с указанными параметрами (все это без перезагрузки страницы, по всей видимости ajax)

Спустя 7 минут, 35 секунд (6.01.2011 - 23:57) Игорь_Vasinsky написал(а):
да эт понятно..... я просто не разу не видел за 10 лет............

Спустя 6 минут (7.01.2011 - 00:03) inpost написал(а):
Invis1ble
Да я понял, просто мало ли, вдруг пригодится и он на всё плюнет?! =)

Спустя 38 минут, 4 секунды (7.01.2011 - 00:41) Игорь_Vasinsky написал(а):
ещё как пригодиться.. сортировка такая. спасиб...

Спустя 7 часов, 8 минут, 7 секунд (7.01.2011 - 07:49) Bossmen написал(а):
Спасибо всем))

Спустя 10 часов, 5 минут, 59 секунд (7.01.2011 - 17:55) Bossmen написал(а):
Допустим у меня отправляеться запрос год вида 2011, а в таблице у меня лежит 12.04.2011, мне нужно вывести всех из таблицы где год равен 2011 ??
как это можно реализовать

Спустя 8 минут, 37 секунд (7.01.2011 - 18:03) Invis1ble написал(а):
Bossmen
Я ведь показал тебе уже реализацию... В чем проблема? Не работает?

Спустя 5 минут, 16 секунд (7.01.2011 - 18:09) Bossmen написал(а):
Да работает))отлично допустим юсер указывает парметр 2004 год и из таблицы у меня не выводит потому что в таблице дата рождения храниться в формате 12.03.2011
а мне надо вывести всех у кого год рождения равен 2011 , а не выводит потому что не равна )) допистим 2011 а сравнивает с 12.04.2005))

Спустя 16 минут, 30 секунд (7.01.2011 - 18:25) Invis1ble написал(а):
Bossmen
ну не знаю... наверно придется переделывать структуру таблицы (3 отдельных поля - year, month и day)... хотя, наверное есть более грамотное решение =)

Спустя 1 минута, 4 секунды (7.01.2011 - 18:26) Invis1ble написал(а):
Bossmen
я просто в SQL не особо силен, возможно есть функция, которая парсит на лету формат DATE..

Спустя 4 минуты, 55 секунд (7.01.2011 - 18:31) Игорь_Vasinsky написал(а):
SELECT * FROM  `table` WHERE `year` LIKE '%2011%'


и буд он у тя искать строки в которых поля year похожи на 2011...

Спустя 2 минуты, 34 секунды (7.01.2011 - 18:34) Invis1ble написал(а):
Игорь_Vasinsky
с годом такое прокатит, но с месяцем и днем - нет, точнее могут быть ошибки.

Спустя 6 минут, 32 секунды (7.01.2011 - 18:40) Игорь_Vasinsky написал(а):
а зачем делать запрос на 12 число каждого мсяцы - когда нужно выводить на 12 число определённого есяца и искать совпадения, напримае

на 12 декабря

SELECT * FROM `table` WHERE `day` LIKE '%12.12%'

а если нужен год - то он же обрамлен точками 12.03.2011

SELECT * FROM `table` WHERE `mounth` LIKE '%.03.%'


если уж он принципиально такой формат выбрал - то тока такой вариант.

Спустя 10 минут, 53 секунды (7.01.2011 - 18:51) Invis1ble написал(а):
Игорь_Vasinsky
насчет точек - да, так можно сделать, я что-то не сразу сообразил )

Спустя 5 минут, 27 секунд (7.01.2011 - 18:57) Игорь_Vasinsky написал(а):
посмотрм что автор суажет...

Спустя 15 минут, 15 секунд (7.01.2011 - 19:12) Invis1ble написал(а):
Игорь_Vasinsky
Все равно, по-ходу затык получается =)
Представь ситуацию: нужно найти даты с известным числом и годом (месяц не известен). Как выкрутишься?

Спустя 8 минут, 2 секунды (7.01.2011 - 19:20) jetistyum написал(а):
Хранить в отдельных полях - совсем не плохая идея, ведь поиск Like будет длиться в любом случае дольше, а храня дату по разным полям всего лишь нужно сравнивать int-ы, это будет происходить гораздо быстрее..

Спустя 5 минут, 25 секунд (7.01.2011 - 19:25) Invis1ble написал(а):
jetistyum
вот и я о том же )

Спустя 8 минут, 25 секунд (7.01.2011 - 19:34) Игорь_Vasinsky написал(а):
Цитата
Представь ситуацию: нужно найти даты с известным числом и годом (месяц не известен). Как выкрутишься?


это как выходит ?

я был бухой, но помню что число было 12е, а было это году в 1981 ?

вроде както глупо.

я б сделал отдельно - ноавтор темы работает с таким вариантом - от этого я и пляшу.

Спустя 11 минут, 53 секунды (7.01.2011 - 19:46) Invis1ble написал(а):
Игорь_Vasinsky
Цитата
я был бухой, но помню что число было 12е, а было это году в 1981

примерно так =) Нужно учитывать все возможные варианты.
Цитата
автор темы работает с таким вариантом

в том то и дело, что в данном случае получается, что это не оптимальный вариант, поэтому я и предлагаю ему изменить структуру таблицы

Спустя 2 минуты, 34 секунды (7.01.2011 - 19:48) Игорь_Vasinsky написал(а):
пускай он решает. мне пофиг. мы тут описали возможные варианты.

Спустя 53 секунды (7.01.2011 - 19:49) Игорь_Vasinsky написал(а):
я вообще уже забыл про что он(помню тока что про даты) - иду тупо по посту и пишу

Спустя 15 минут, 17 секунд (7.01.2011 - 20:04) Bossmen написал(а):
Значит создать отдельные поля для месяца дня и года,
а я думаю другое решение есть))
Выход всегда есть))
то не охота таблицу лишними ячейками засорять

Спустя 16 минут, 37 секунд (7.01.2011 - 20:21) Invis1ble написал(а):
Bossmen
Цитата
а я думаю другое решение есть))
Выход всегда есть))

есть конечно, например - найти, есть ли штатная ф-ция SQL для парсинга значений из полей типа DATE, а если нет - написать свою. Но, имхо, это не оптимальный вариант, т.к. он получится медлительный. Вобщем, решай сам. Если найдешь другое решение - отпишись )

Спустя 4 минуты, 27 секунд (7.01.2011 - 20:25) Игорь_Vasinsky написал(а):
бери значение даты: 12.03.2010 - >считывай и загоняй в массив - разделитель блин . (точка)

получаешь массив с 3мя значениями - (как бы имитируешь 3 поля) - и проверяй по массиву что те надо.

парсер))))))))))))))))) нах он нужен. МАССИВ - форево

Спустя 4 минуты, 50 секунд (7.01.2011 - 20:30) Игорь_Vasinsky написал(а):
explode и implode - в помощь ! почитай про них

Спустя 1 минута, 51 секунда (7.01.2011 - 20:32) Invis1ble написал(а):
Игорь_Vasinsky
средствами php? И сколько это времени займет такая движуха, ты представляешь? Выбрать все значения из БД и пройтись по всем.... это жесть )

Спустя 3 минуты, 55 секунд (7.01.2011 - 20:36) Bossmen написал(а):
А вы бы как сделали создали 3 отдельных поля или решали с помощью различных функций??

Спустя 5 минут, 45 секунд (7.01.2011 - 20:42) Игорь_Vasinsky написал(а):
время ??? что такое время - кода нужен результ.

а теперь по существу - чт мы делаем ?

в БД бращаться нужно хоть как ? правльно ? - а работа с массивами начинается после работы с БД.

время..... да 3 секунды.

Спустя 3 минуты, 34 секунды (7.01.2011 - 20:45) Invis1ble написал(а):
Bossmen
я бы сделал в 3 поля

Игорь_Vasinsky
Цитата
время..... да 3 секунды

может быть, но представь, если несколько юзеров сразу будет искать.
Цитата
в БД бращаться нужно хоть как ? правльно ? - а работа с массивами начинается после работы с БД

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

Спустя 2 минуты, 2 секунды (7.01.2011 - 20:47) Bossmen написал(а):
А если такой вариант?
из базы выводим все id пользователей оттуда выводим дата, потом из запроса get формируем шаблон а потом сравниваем,
и те id которые совпали подставляем в основной запрос

Спустя 3 минуты, 43 секунды (7.01.2011 - 20:51) Invis1ble написал(а):
Bossmen
примерно об этом говорит Игорь. Я бы не стал так делать. Решай сам

Спустя 58 секунд (7.01.2011 - 20:52) Bossmen написал(а):
А в чем причина Invis1ble ?

Спустя 2 минуты, 8 секунд (7.01.2011 - 20:54) Invis1ble написал(а):
Bossmen
я уже написал причину - скорость обработки. Смотри мои предыдущие посты.

Вообще нормальные программисты сначала все тщательно продумывают, потом проектируют БД под нужные задачи. При таком подходе подобных проблем не должно возникать.

Спустя 1 минута, 56 секунд (7.01.2011 - 20:56) Bossmen написал(а):
Значит буду делать для каждой свою таблицу))для даты и для года и для месяца))

Спустя 4 минуты, 52 секунды (7.01.2011 - 21:01) Invis1ble написал(а):
Bossmen
Цитата
Значит буду делать для каждой свою таблицу))для даты и для года и для месяца))

laugh.gif biggrin.gif
Ага, а лучше - 3 отдельных БД для каждой записи ))))))
Причем тут таблица? Я написал "3 отдельных поля", а не таблицы =)

Спустя 2 минуты, 35 секунд (7.01.2011 - 21:04) Bossmen написал(а):
Я ошибся))конечно поля

Спустя 3 минуты, 42 секунды (7.01.2011 - 21:07) Игорь_Vasinsky написал(а):
ты говоришь про нормальных или опытных ? нормальные - пишут работающий код.

блин - да хоть как запрос в бд и так и так - работа с массивами - начинается после запроса и без участия мускула - уже с полученными данными.

Спустя 5 минут, 58 секунд (7.01.2011 - 21:13) Bossmen написал(а):
Я думаю что вариант Игорь_Vasinsky тоже норм, надо узнать у тех кто с этим уже работал))

Спустя 10 минут, 35 секунд (7.01.2011 - 21:24) Игорь_Vasinsky написал(а):
ну я работал - узнавай.

и не вешал мускул.

я вообще ниче не вешал, если не считать тот угар с бесконечным циклом года 2 назад...

Спустя 2 минуты, 30 секунд (7.01.2011 - 21:26) Bossmen написал(а):
Игорь_Vasinsky ты говоришь что надо решить мою задачу твоим способои и все будет намэ))
А скинь скрипт как ты ее решил)

Спустя 5 минут, 45 секунд (7.01.2011 - 21:32) Игорь_Vasinsky написал(а):
а ты что с массивами не работал ?
у меня вообще сайт с фильмами в разработке - тока там не дата, а атёры в одном поле.

так вот если я вывести список актёров (по алфавиту) (ссылочный) - то вытаскиваю всё поле - разбиваю в массив - составляю результат и делаю вывод.

при этом т.к. афавитный указатель по фамилиям - я ещё переворачиваю - имя с фамилией - ищю совпадения - нахожу - собираю - переставляю обратно - и вывжу.

и не кто не повис пока.


Спустя 5 минут, 55 секунд (7.01.2011 - 21:38) Invis1ble написал(а):
Игорь_Vasinsky
Цитата
блин - да хоть как запрос в бд и так и так - работа с массивами - начинается после запроса и без участия мускула - уже с полученными данными

ну почему же...
По твоему алгоритму (если я правильно тебя понял):
1. делаем запрос в БД на выборку ВСЕХ данных (sql)
2. получаем данные, загоняем в двухмерный массив (php)
3. проходимся по массиву (по первому измерению), берем из каждого элемента (массива) дату, разбиваем на составляющие (день, месяц, год), если удовлетворяет условиям - выводим результат (php)

мой алгоритм:
1. формируем запрос к БД (php)
2. делаем запрос на выборку данных, удовлетворяющих поставленным условиям (sql)
3. получаем данные, выводим их. (php)

так вот, 3-й шаг в твоем алгоритме будет выполняться бОльшую часть времени (т.к. реализация пыховая, а в моем случае этим будет заниматься мускул).

Спустя 2 минуты, 25 секунд (7.01.2011 - 21:40) Invis1ble написал(а):
Игорь_Vasinsky
Цитата
и не кто не повис пока

определяющее слово - пока )) до поры-до времени... будешь что-то монструозное делать с такой логикой - пиши пропало )

Спустя 7 минут, 11 секунд (7.01.2011 - 21:48) Игорь_Vasinsky написал(а):
да я понял твой алгаритм - я бы и сам так сделал - я же говорю я копаю в сторону автора, а мой алгоритм ты принял ошибочно.

1. делаем запрос в БД на выборку ВСЕХ в цикле - поочерёдно данных (sql) - и каждый раз формруем из поля в двухмерный массив
2. проходимся по массиву (по первому измерению)( я тока про 5е измерение смотрел), берем из каждого элемента (массива) дату, разбиваем на составляющие (день, месяц, год), - массив уже сформирован - мы просто ищем взависимости от запрса по нужным элементам массива (по индексам) - если есто день и год - то array[0] и array[2], если это месяц и год - то array[1] и array[2] и т.д.
3.выводим результат (php)

Цитата
определяющее слово - пока )) до
проблемы стоит решать по мере возникновения - все форс мажоры не подсчтать.








Спустя 2 минуты, 41 секунда (7.01.2011 - 21:50) Игорь_Vasinsky написал(а):
т.е. если в строке есть ячейка с датой 12.03.2009 - >


$date_table = "12.03.2009";
$date = explode(".", $date_table);

$date[0] = "12";
$date[1] = "03";
$date[2] = "2009";

Спустя 12 минут, 10 секунд (7.01.2011 - 22:02) Invis1ble написал(а):
Вот я щас заморочился, и вот чо нашел (составил примерный запрос):
$query = "SELECT * FROM `table`
WHERE
DAYOFMONTH(`date`) = '"
. $day . "' OR
MONTH(`date`) = '"
. $month . "' OR
YEAR(`date`) = '"
. $year . "'";

из чего следует, что штатных функций SQL полно, нужно только поискать.
Все должно работать, без всяких танцев =)

Спустя 4 минуты, 9 секунд (7.01.2011 - 22:07) Игорь_Vasinsky написал(а):
молодец.

Спустя 30 секунд (7.01.2011 - 22:07) Bossmen написал(а):

$query = "SELECT * FROM tabl_people WHERE rus_name = '$name_people'";

$date = array('year' => $year);

foreach ($date as $field => $value)
if ($value != 0)
$query .= " and " . $field . " = '" . $value . "'";


а как можно в цикле использовать

Спустя 6 минут, 53 секунды (7.01.2011 - 22:14) Invis1ble написал(а):
$query = "SELECT * FROM `tabl_people` WHERE `rus_name` = '" . $name_people . "'";

if ($day != 0)
$query .= " AND DAYOFMONTH(`date`) = '" . $day . "'";

и т.д.

Спустя 10 минут, 40 секунд (7.01.2011 - 22:25) Игорь_Vasinsky написал(а):
а где тут цикл?

Спустя 8 минут, 3 секунды (7.01.2011 - 22:33) Invis1ble написал(а):
Игорь_Vasinsky
a зачем?

Спустя 3 минуты, 27 секунд (7.01.2011 - 22:36) Invis1ble написал(а):
Игорь_Vasinsky
тот цикл писал я, примерно 20 постов назад =)
после этого выяснилось, что дата храниться в одном поле.. Теперь, когда я показал пример использования SQL-функций, цикл уже не нужен )

Спустя 1 минута, 29 секунд (7.01.2011 - 22:38) Игорь_Vasinsky написал(а):
лан. вникать не стану.

Спустя 13 минут, 41 секунда (7.01.2011 - 22:51) jetistyum написал(а):
и всетаки я настаиваю - хранить дату в разных полях выгоднее smile.gif

Спустя 2 минуты, 16 секунд (7.01.2011 - 22:54) Игорь_Vasinsky написал(а):
я так наоборот терь этим пользоваться буду

$query = "SELECT * FROM `table` WHERE  DAYOFMONTH(`date`) = '" . $day . "' OR   MONTH(`date`) = '" . $month . "' OR  YEAR(`date`) = '" . $year . "'";


Спустя 8 минут, 19 секунд (7.01.2011 - 23:02) Invis1ble написал(а):
jetistyum
поясни, с чем это связано. Это личное предпочтение, или есть объективные аргументы? Скорость обработки?

Спустя 13 минут, 41 секунда (7.01.2011 - 23:16) jetistyum написал(а):
Конечно скорость обработки. давай попробуем разобраться как происходит поиск.
внутренний итератор проходит по каждой записи в базе данных и трижды запускает функцию работы с датой, к найденной строке, и результаты работы функции сравнивает с аргументом. в другом же случае ты просто сравниваешь два инта.
профит smile.gif

Спустя 8 минут, 41 секунда (7.01.2011 - 23:24) Игорь_Vasinsky написал(а):
в простоте синтаксиса и отсутствие необходимости использования дополнительных функций.

Спустя 1 минута, 20 секунд (7.01.2011 - 23:26) Invis1ble написал(а):
jetistyum
ну я в принципе так и понял, что это связано с дополнительной работой функций... Просто думал, что может есть еще какие-то причины

Спустя 12 часов, 42 минуты, 51 секунда (8.01.2011 - 12:08) Bossmen написал(а):
Я вот так сделал))


function people ($name_people,$year,$day,$month)
{

$query = "SELECT * FROM tabl_people WHERE 1 = '1'";
if ($year != 0)
$query .= " and YEAR(`birthday`) = '" . $year . "'";

if ($day != 0)
$query .= " and DAYOFMONTH(`birthday`) = '" . $day . "'";

if ($month != 0)
$query .= " and MONTH(`birthday`) = '" . $month . "'";


$result = mysql_query($query);



while($myrow = mysql_fetch_assoc($result))
{
include './tabl.tpl';
}


}

Спустя 14 минут, 39 секунд (8.01.2011 - 12:23) Dasha. написал(а):
по сабжу - если поиск идёт выборкой по 20+полям, то тут как не крути - пост. Иначе - гет.
Если гетом, то такую линку даже не дать другу (без обработки), ибо она будет на 8 строк.
Пример - поиск картинок в гугле. Выберите нужную и перейдёте на страницу де найдена эта картинка. И её выделят в рамочку - скопируйте адресс. Будете приятно удивленны.
К чему веду? Да так же будет выглядеть строка поиска при бОльшом кол-ве параметров.

Спустя 30 минут, 37 секунд (8.01.2011 - 12:54) Bossmen написал(а):
Она не будет очень длиной если будет подставляться имя актера, то в гет будет передаваться только id актера, а если допустим параметр дата не будет указана то в гет не будет отправляться))Вот только пока не пойму как))
Может перед передачей гет фильтр сделать))

Спустя 3 часа, 20 минут, 37 секунд (8.01.2011 - 16:14) jetistyum написал(а):
Цитата (Dasha. @ 8.01.2011 - 12:23)
по сабжу - если поиск идёт выборкой по 20+полям, то тут как не крути - пост. Иначе - гет.
Если гетом, то такую линку даже не дать другу (без обработки), ибо она будет на 8 строк.
Пример - поиск картинок в гугле. Выберите нужную и перейдёте на страницу де найдена эта картинка. И её выделят в рамочку - скопируйте адресс. Будете приятно удивленны.
К чему веду? Да так же будет выглядеть строка поиска при бОльшом кол-ве параметров.

http://www.google.com.ua/imgres?imgurl=htt...0&tx=174&ty=100


вот тебе линка без обработки, пусть даже большая, что мешает тебе на нее нажать (скопировать)
если бы она была сделана постом, тебе бы было проще? я бы тебе вообще не смог ее дать. какая разница сколько в ней строчек, ты ее что, учить на память хочешь? Тебе не кажется что если даже гугл (хвала ему) делает ссылку гет-ом, то наверное там над этим думали, и думали не глупые люди smile.gif

Спустя 4 часа, 35 минут, 18 секунд (8.01.2011 - 20:50) Bossmen написал(а):
выводит тогда когда в базе один сериал, а когда несколько пусто ))
надо что то сделать в строке

$query .= " and id_people = '" . $myrow_distributiont['actors']. "'";




$query_distribution = "SELECT * FROM tabl_distribution WHERE ser = '$ser'";
$result_distributiont = mysql_query($query_distribution);

if($ser != 0)
while($myrow_distributiont = mysql_fetch_assoc($result_distributiont))
{

$query .= " and id_people = '" . $myrow_distributiont['actors']. "'";
}

Спустя 11 минут, 18 секунд (8.01.2011 - 21:01) Игорь_Vasinsky написал(а):
Цитата
if($ser != 0)


что за переменная $SER ????

тебе нужно подсчитать количество строк (сериалов) - и если их в бд больше 0 - то все на вывод

Спустя 6 минут, 39 секунд (8.01.2011 - 21:08) Invis1ble написал(а):
Bossmen
в той строке все нормально. наверно дальше налажал где-то..

Спустя 1 минута, 3 секунды (8.01.2011 - 21:09) Invis1ble написал(а):
Bossmen
покажи, как ты полностью $query формируешь, иначе по тому куску кода сложно судить

Спустя 20 минут, 38 секунд (8.01.2011 - 21:29) Bossmen написал(а):

<?php

function
people ($name_people,$year,$day,$month, $ser)
{

$query = "SELECT * FROM tabl_people WHERE 1 = '1'";
if ($year != 0)
$query .= " and YEAR(`birthday`) = '" . $year . "'";

if ($day != 0)
$query .= " and DAYOFMONTH(`birthday`) = '" . $day . "'";

if ($month != 0)
$query .= " and MONTH(`birthday`) = '" . $month . "'";


$query_distribution = "SELECT * FROM tabl_distribution WHERE ser = '$ser'";
$result_distributiont = mysql_query($query_distribution);

if($ser != 0)
while($myrow_distributiont = mysql_fetch_assoc($result_distributiont))
{

$query .= " and id_people = '" . $myrow_distributiont['actors']. "'";
}



$result = mysql_query($query);




while($myrow = mysql_fetch_assoc($result))
{
include './tabl.tpl';
}

}



вот весь код

Спустя 32 минуты, 35 секунд (8.01.2011 - 22:02) Игорь_Vasinsky написал(а):
шо за услвие WHERE 1 = '1'";

Спустя 7 минут, 41 секунда (8.01.2011 - 22:09) Invis1ble написал(а):
Bossmen
поменяй в цикле в запросе and на or, или прочти про IN() в SQL...

Блин, ох и у томил меня же этот топик..... ph34r.gif

Автор, не лезь в дебри!!!!!!!!!!! Начни с более простых вещей smile.gif

Спустя 33 секунды (8.01.2011 - 22:10) jetistyum написал(а):
вероятно это первоначальное условие, шобы потом можно было шото к нему конкатенировать используя AND и шобы все это было потом корректно smile.gif

Спустя 32 минуты, 29 секунд (8.01.2011 - 22:42) Bossmen написал(а):
jetistyum ты прав))

Спустя 11 минут, 14 секунд (8.01.2011 - 22:54) Dron19 написал(а):
Цитата (Зарегестрирований @ 5.01.2011 - 16:08)
Да точно я быстро ляпал по клавиатуре и один символ вылетел с текста
Кстате давно хотел спросить какая разница между == и === ?
-----------------
И вот мой код
if (isset ($_GET['id']))
{
$idcat = $_GET['id'];
там все работает ТОЛЬКО при одном = при двух выводится ошибка
Это по томучто я приравниваю одну переменную к другой а не проверяю (равно ли) так ведь?

== равно ли?
=== идентично ли?

Спустя 12 часов, 40 минут, 33 секунды (9.01.2011 - 11:34) Bossmen написал(а):
Всем большое спасибо))Мне проста надо было сесть и подумать))
Все работает))
Вот скрипт

function people ($name_people,$year,$day,$month, $ser)
{

$query = "SELECT * FROM tabl_people WHERE 1 = '1'";
if ($year != 0)
$query .= " and YEAR(`birthday`) = '" . $year . "'";

if ($day != 0)
$query .= " and DAYOFMONTH(`birthday`) = '" . $day . "'";

if ($month != 0)
$query .= " and MONTH(`birthday`) = '" . $month . "'";


$query_distribution = "SELECT * FROM tabl_distribution WHERE ser = '$ser'";
$result_distributiont = mysql_query($query_distribution);

if($ser != 0)
{
$i = 0;
while($myrow_distributiont = mysql_fetch_assoc($result_distributiont))
{

$id_array[$i] = $myrow_distributiont['actors'];
$i++;
}
$id = implode (",", $id_array);


$query .= " and id_people IN (". $id .")";
}

Спустя 4 часа, 30 минут, 31 секунда (9.01.2011 - 16:05) Invis1ble написал(а):
Bossmen
ну слава яйцам =)

Спустя 39 секунд (9.01.2011 - 16:05) Bossmen написал(а):
XDD
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.