PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 8
Roman Отправлено: 24 Марта, 2009 - 06:37:19 • Тема: Выборка и склеивание значенией из БД • Форум: Напишите за меня, пожалуйста

Ответов: 8
Просмотров: 103
тем не менее попробуйте использовать прилагаемую библиотеку

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //как водится не доконца ясна постановка задачи, ну например непонятно поле
  4. //used после показа должно иметь значение 1 (то есть более вы никогда его не
  5. //намерены показывать) или его значение должно увеличиваться на одну единицу
  6. //и теперь, предположим, к показу этого поля можно будет вернуться после то-
  7. //го как будут показаны все поля с "меньшим приоритетом"
  8. //(меньшим показ-лем used)...ну, исходим из того, что, все же, показы будут
  9. //неоднократными
  10.  
  11.   class SelectThreeRows{
  12.           static $count;
  13.           static $level;
  14.          
  15.          
  16.           //вызываем функцию с параметром: "кол-во нужных строк" ($summ)
  17.           //переменная $level указывает какое значение used считается "непоказанным"
  18.           //ее можно задать и явно, но вообщето если функция не обнаружит ни одной
  19.           //записи с таким уровнем она автоматически прибавит единицу и "пойдет по
  20.           //второму кругу" и так будет прибавлять по единице пока не обнаружит мини-
  21.           //мальный уровень который и посчитает "непоказанным", так что об этом можно
  22.           //незаботиться
  23.          
  24.           static function SelectinThreeRows($summ,$level=0){
  25.                         //получаем весь список строк с требуемым
  26.                         //значением поля used
  27.                         self::$level=$level;
  28.                         //функция выбирающая все "непоказанные" записи
  29.                         //расположена на строке 91
  30.                    $massa=self::SelectAllRows();
  31.  
  32.                    self::$level+=1;
  33.  
  34.  
  35.                   //в эту переменную будет помещена "выходная строка",
  36.                   //ну, то есть результат
  37.                   $content="";
  38.           //если общее кол-во непо-ных записей больше трех...
  39.                           if (self::$count>$summ){
  40.                                   //выбираем три НЕОДИНАКОВЫХ случайных числа
  41.                                   for($a=0;count($num)<3;$a=mt_rand(1,(self::$count-1)),$num[$a]=$a);
  42.                                                                                
  43.                                   //далее выбираем строки равные значениям этих чисел
  44.                                  
  45.  
  46.                                           foreach($num as $nm){
  47.                                                  
  48.                                                   //формируем выходную строку...
  49.                                                   $content.=mysql_result($massa,$nm,"content").", ";
  50.                                                   $id=mysql_result($massa,$nm,"id");
  51.                                                  
  52.                                                   //изменяем значение поля used в таблице
  53.                                                   mysql_query ("
  54.                                                   UPDATE sites
  55.                                                   SET used=".self::$level."
  56.                                                   WHERE id=".$id
  57.                                                   ) or die ("Ошибка запроса:".
  58.                                                   "
  59.                                                   UPDATE sites
  60.                                                   SET used=".self::$level."
  61.                                                   WHERE id=$id".
  62.                                                   mysql_error());
  63.                                           }
  64.                                    //возвращаем полученную строку
  65.                                    
  66.                                    return $content;
  67.           //если же кол-во непоказывавшихся записей меньше или равно 3...        
  68.                           }else{
  69.                                   //...то, просто сразу передаем их последовательно в
  70.                                   //выходную строку
  71.                                   for($content="";$row=mysql_fetch_assoc($massa);){
  72.                                                 $content.=$row['content'].", ";
  73.                                                 $id=$row['id'];
  74.                                   //и естественно меняем их значения used  в таблице
  75.                                                
  76.                                                 mysql_query ("
  77.                                                   UPDATE sites
  78.                                                   SET used=".self::$level."
  79.                                                   WHERE id=$id
  80.                                                   ") or die ("Ошибка запроса:".mysql_error());
  81.                                  
  82.                                   }
  83.                                   return $content;
  84.                           }
  85.                  
  86.                  
  87.          
  88.           }
  89.                    //приходится сначала выбирать все непоказанные записи
  90.                   //так как на этапе выборки мы не можем случайным образом
  91.                   //выбирать только записи с used=0
  92.           static function SelectAllRows(){
  93.                  
  94.           $massa=mysql_query(
  95.                   "SELECT
  96.                   id, content
  97.                   FROM sites
  98.                   WHERE used=".self::$level."
  99.                   ")or die ("Ошибка запроса:".mysql_error());
  100.                   //определяем общее кол-во записей непоказанных строк
  101.                   //для указания в генераторе "верхнего уровня" выборки
  102.                   self::$count=mysql_num_rows($massa);
  103.                   //если ненайдено ни одного поля с удов-щим
  104.                    //условием увеличиваем параметр used на единицу и
  105.                    //перевызываем функцию заново (пошли на
  106.                    //второй круг, так сказать :0))
  107.                   if(self::$count==0){
  108.                                 self::$level+=1;
  109.                         //здесь функция вызывает сама себя до
  110.                         //тех пор пока не получит удов. результата     
  111.                                 $massa=self::SelectAllRows();
  112.                    }
  113.                    
  114.                   return $massa;
  115.           }
  116.   }
  117. ?>
  118.  
  119.  


ее можно скопировать в файл, назвать его например: "SelectThreeRows.php".

в этом случае (и при том, что он будет расположен в директории исполняемой программы)
синтаксис ее подключения будет следующим:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.   require_once "SelectThreeRows.php";
  4.   $result=SelectThreeRows::SelectinThreeRows(2);
  5.  
  6. ?>
  7.  
  8.  


перед этим конечно должно быть выполненно подключение к БД

В параметрах вам нужно передать только лишь количество требуемых записей для
выборки, вы указывали три, но библиотека построена так, что их кол-во можно изменять.
Вообще в этой задачке есть некторые "подводные камни", я постарался их учесть.Если попробуете, или будет что нибудь непонятно - отпишитесь. Отвечу.
(Добавление)
ну, как обычно ошибочка есть в строке 40 надо исправить цифру 3 не переменную $summ, а то работать будет "неровно".
Roman Отправлено: 16 Марта, 2009 - 21:35:58 • Тема: Содержание ключей массивов • Форум: Программирование на PHP

Ответов: 6
Просмотров: 504
Спасибо Valenok за приведенный пример "научного тыка", но этими методами я и сам владею. Я, вообще то, надеялся на то, что либо кто нибудь сможет компетентно объяснить какими могут или должны быть ключи, либо даст ссылку на первоисточник по этому вопросу...ну, да ладно.
Кстати, сделай print_r($arr) для своего примера, и ты убедишься, что ключем первого значения является число (ведь дескриптор открытого файла всего лишь число вне контекста обращения к файлу), второе не сохраняется в массиве вовсе, а к третьему значению вообще не понятно как обратиться, загадка.
Кроме того, оказывается, что длинна ключа может превышать 56000! знаков, вот это действительно интересно, учитывая наличие возможности сериализации сложных объектов.
Но опять же - дискуссия чисто теоретическая, так как не представляю, пока, себе где это могло бы пригодиться.
В любом случае приятно, что на вашем форуме вопросы не остаются без внимания. Спасибо за интерес и коментарии.
Roman Отправлено: 13 Марта, 2009 - 04:32:14 • Тема: Содержание ключей массивов • Форум: Программирование на PHP

Ответов: 6
Просмотров: 504
Может быть невнимательно читал, не везде искал...Но кто может вразумить: какие типы данных могут использоваться в качестве ключей ассоциативных массивов? С одной стороны мы можем преобразовать регистр ключей массива по своему усмотрению в верхний или нижний, значит ключи по своей природе не являются константами. С другой стороны при попытке в качестве ключа указать объект или другой массив получаем ошибку...и потом какая максимально допустимая длинна названия ключа? Если кто даст ссылку буду премного благодарен.
Нафиг мне это нужно?! Не спрашивайте, сам пока незнаю :0).
Roman Отправлено: 19 Февраля, 2009 - 12:24:00 • Тема: Вычленение слов в русскоязычном тексте • Форум: Регулярные выражения

Ответов: 7
Просмотров: 299
EuGen пишет:
Насчет рег. выражений не уверен, пока что лучше и мощнее инструмента нет.

Возможно вы правы, а я погорячился. Но вот интересный, с моей точки зрения, пример:
рассматриваемый текст:
Цитата:
2-комнатную кв. , ремонт, угловая, перепланировка, цена - 8500000 у.е. по курсу в тенге, продам.
Конт. тел.: 43-89-63, 8 701 570 7991 .

шаблон preg_match:
Цитата:
/(цена\W*)|()/six

рез.массив preg_match:
Цитата:
Array ( [0] => [1] => [2] => )

Как видите захват слова "цена" не произошел, хотя есть для него ключ в массиве, то есть что? Ключ организовался а значение не было помещено? И такое только с кириллицей, с латинскими шрифтами все ок.
Дальше, если приведенный шаблон поместить в качестве первого аргумента в функции preg_replace (в качестве искомого), а вторым оставить пустую строку (на что меняем), третьим, естественно приведенный выше текст, то в результате получим:
Цитата:
2-комнатную кв. , ремонт, угловая, перепланировка, 8500000 у.е. по курсу в тенге, продам. Конт. тел.: 43-89-63, 8 701 570 7991

Т.е. все правильно сработало в результат попал текст с изъятым словом "цена". Но почему же тогда в рез.массив preg_match оно не попадает - вот этого я не понимаю!
Вероятно, когда пойму, тогда можно будет считать, что что-то смыслю в рег выражениях :0).
Roman Отправлено: 18 Февраля, 2009 - 16:21:11 • Тема: Вычленение слов в русскоязычном тексте • Форум: Регулярные выражения

Ответов: 7
Просмотров: 299
Общая задача несколько сложнее.В любом случае в результирующий массив должна попасть строка полностью (это не совсем так, но упрощая задачу можно сказать что и так), но в случае если строка содержит слово "ремонт" оно должно попасть в отдельную переменную рез.массива. В случае применения же выражения приведенного тобой мы вообще не получим рез.массива в том случае если нет в нем слова "ремонт". Так ведь?. Пробовал всякое и локали и перекодировки, что то ничего не получается. Вообще складывается мнение что при помощи рег выражений не очень эффективно сложно-разбирать кириллические строки (а может быть и строки вообще). Однако решение данной задачи нашел - применил шаблон:/.*((ремонт)|()).*/, и получил нужный результат.
Roman Отправлено: 18 Февраля, 2009 - 12:48:14 • Тема: Вычленение слов в русскоязычном тексте • Форум: Регулярные выражения

Ответов: 7
Просмотров: 299
Под словом "карман"-имеется в виду отдельное значение в результирующем массиве команды preg_match().Иногда такой термин ("карман") применяется к результату работы захватывающих подмасок. Мне кажется интуитивно понятным, что в данном контексте "карман" означает сущность или объект являющийся составляющей частью другой сущности или объекта, но тем не менее выделенный отдельно.
(Добавление)
Krist_ALLа прошу не беспокоится.
Roman Отправлено: 18 Февраля, 2009 - 09:22:41 • Тема: Вычленение слов в русскоязычном тексте • Форум: Регулярные выражения

Ответов: 7
Просмотров: 299
Имеем текст:
Цитата:
2-комнатную кв. , ремонт, угловая, перепланировка, цена - 85000 у.е. по курсу в тенге, продам.
Конт. тел.: 43-89-63, 8 701 570 7991 .

пытаемся выделить слово "ремонт" при условии что оно есть. Это слово должно попасть в отдельный "карман".
Шаблон: /.*(ремонт)?.*/
Но карман даже не организуется, как будто слова нет. Если же убрать вопросительный знак, то все нормально - есть "карман" и в нем слово "ремонт". Но тогда возникнет ошибка при обработке текста не содержащего слова "ремонт".
С латиницей, в этих случаях - все нормально, а вот с кириллицей - проблема. Есть ли решение?
Roman Отправлено: 04 Ноября, 2008 - 22:59:57 • Тема: Авторизация • Форум: Напишите за меня, пожалуйста

Ответов: 32
Просмотров: 356
в течении сессии авторизованный пользователь отслеживается при помощи организации SID, при этом он может спокойно путешествовать хоть куда пока не закроет браузер (прерывается сессия). Если нужны подробности помогу, а вообще вот как то так Улыбка
(Добавление)
и включенные куки при этом не обязательны...

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB