Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка из таблицы БД
 
 автор: pautina   (21.12.2011 в 08:59)   письмо автору
 
 

Здравствуйте Уважаемое сообщество
скажите как из участка кода, он будет хранится в столбце zagolovok БД new_bd сделать выборку

<p class="index_lessons"><img src="lessons/les1726/mini.jpg" alt="миниатюра к уроку Создаём в Фотошоп коллаж 
полный таинственности" title="миниатюра к уроку Создаём в 
Фотошоп коллаж полный таинственности" width="42" 
height="42"/><a href="lessons.php?rub=3&id=1726">Создаём в 
Фотошоп коллаж полный таинственности</a><span>Автор/Переводчик:
 <a class="small" href="/lessons.php?aut=73">Александра 
Анцыперович</a></span> <br /> <span class="Hard">Сложность: 
<a class="small" href="/lessons.php?dif=3">Усложненная</a></span></p>

Нужно из этого участка кода оставить только ссылку <a href="lessons.php?rub=3&id=1726">, даже не саму ссылку а нужен только текст lessons.php?rub=3&id=1726 + ещё нужно к этому тексту добавить адрес домена http://www.name.ru/, в итоге должно получится
http://www.name.ru/lessons.php?rub=3&id=1726
mysql_query("SELECT zagolovok FROM new_bd WHERE условие",$db)

как то с помощью like это можно прописать, вырезать из строки нужную нам часть,
ни поможете с условием?

  Ответить  
 
 автор: pautina   (21.12.2011 в 14:28)   письмо автору
 
   для: pautina   (21.12.2011 в 08:59)
 

Исходные заголовки нужно вытащить с кода страницы http://www.photoshop-master.ru/lessons.php?rub=1
В итоге выборка дожна содержать адреса ссылок на все заголовки.
lessons.php?rub=1&id=1689
lessons.php?rub=1&id=1677
...
lessons.php?rub=1&id=1424

Для того чтобы в строке найти вхождение можно использовать
mysql_query("SELECT zagolovok FROM new_bd WHERE zagolovok REGEXP 'lessons.php?rub=3&id=1726'",$db)

насколько правильно это описано регулярными выражениями?

  Ответить  
 
 автор: cheops   (21.12.2011 в 14:58)   письмо автору
 
   для: pautina   (21.12.2011 в 14:28)
 

Правильно, если работает как надо, только вам и выбирать (в выражении SELECT) тоже придется zagolovok REGEXP 'lessons.php?rub=3&id=1726', а не просто zagolovok.

  Ответить  
 
 автор: pautina   (21.12.2011 в 17:54)   письмо автору
 
   для: cheops   (21.12.2011 в 14:58)
 

mysql_query("SELECT zagolovok FROM new_bd WHERE (REGEXP 'lessons.php?rub=3&id=1726'",$db))

Как мне в этом запросе регулярными выражениями прописать условие что адрес заголовка может быть

lessons.php?rub=1&id=1689
lessons.php?rub=1&id=1677
 ...
lessons.php?rub=1&id=1424

Левая часть одинакова, меняется только правая часть после символа = и содержит 4,3,2 любые числа как символа строки (число целое 1 значное)

  Ответить  
 
 автор: cheops   (21.12.2011 в 18:08)   письмо автору
 
   для: pautina   (21.12.2011 в 17:54)
 

3 и 1726 следует использовать [0-9]+
SELECT zagolovok FROM new_bd
WHERE (REGEXP 'lessons.php?rub=[0-9]+&id=[0-9]+'

  Ответить  
 
 автор: pautina   (25.12.2011 в 15:07)   письмо автору
 
   для: cheops   (21.12.2011 в 18:08)
 

Теперь мне нужно обновить содержимое ячейки таблицы
для этого я использую
UPDATE `category1` SET `Field 2` WHERE (`Field 2`='lessons.php?rub=[0-9]+&id=[0-9]+')

либо так
UPDATE `category1` SET `Field 2` WHERE (`Field 2`='REGEXP 'lessons.php?rub=[0-9]+&id=[0-9]+'')

или
UPDATE `category1` SET `Field 2`= REPLACE(`Field 2`, '<A href="lessons.php?rub=1&amp;id=1689">Создаём абстрактное золотое кольцо в Фотошоп</A>', ''REGEXP 'lessons.php?rub=[0-9]+&id=[0-9]+''')

так ещё пробовал
UPDATE `category1` SET `Field 2`= REPLACE(`Field 2`, '<A href="'REGEXP 'lessons.php?rub=[0-9]+&id=[0-9]+''">'REGEXP '[a-я]'</A>', ''REGEXP 'lessons.php?rub=[0-9]+&id=[0-9]+''')

есть ещё такой вариант
UPDATE `category1` SET `Field 2`=REPLACE(`Field 2`, '<A href="lessons.php?rub=1&amp;id=[0-9]">/[а-яА-Я\s]</A>', 'замена')

Но обновления нет
Последний вариант кода наиболее подходит, здесь замена идёт но только если всё строго прописано (без d=[0-9]">/[а-яА-Я\s] )
Как подкорректировать не подскажете?

  Ответить  
 
 автор: pautina   (26.12.2011 в 12:31)   письмо автору
 
   для: pautina   (25.12.2011 в 15:07)
 

Не подскажете как мне правильно обновить содержимое таблицы
имею таблицу category1, поле где нужно обновить поля Field 2, содержимое этого поля
<A href="lessons.php?rub=1&amp;id=1689">Создаём абстрактное золотое кольцо в Фотошоп</A>
<A href="lessons.php?rub=1&amp;id=1677">Создай экспрессивную космическую иллюстрацию в Фотошоп</A>
<A href="lessons.php?rub=1&amp;id=1661">Создай светящегося супергероя в Фотошоп</A>
<A href="lessons.php?rub=1&amp;id=1641">Создаём абстрактный постер в Фотошоп</A>
<A href="lessons.php?rub=1&amp;id=1608">Девушка в брызгах воды</A>
<A href="lessons.php?rub=1&amp;id=1607">Создай абстракцию из фото в Фотошоп</A>
....

Мне нужно оставить только адреса ссылок
lessons.php?rub=1&amp;id=1689
lessons.php?rub=1&amp;id=1677
lessons.php?rub=1&amp;id=1661
lessons.php?rub=1&amp;id=1641
lessons.php?rub=1&amp;id=1608
lessons.php?rub=1&amp;id=1607

Для обновления использую UPDATE с описанием адреса ссылки и текста ссылки при помощи регулярных выражений
UPDATE `category1` SET `Field 2`=REPLACE(`Field 2`, '<A href="lessons.php?rub=1&amp;id=[0-9]">/[а-яА-Я\s]</A>', 'замена')

такой код не работает
если прописывать строго для 1 определённой записи
UPDATE `category1` SET `Field 2`=REPLACE(`Field 2`, '<A href="lessons.php?rub=1&amp;id=1677">Создай экспрессивную космическую иллюстрацию в Фотошоп</A>', 'замена')

то обновление идёт
как прописать чтоб обновление сработало сразу для всез записей?

  Ответить  
 
 автор: cheops   (26.12.2011 в 12:45)   письмо автору
 
   для: pautina   (26.12.2011 в 12:31)
 

Нет, в операторе UPDATE в функции REPLACE() регулярные выражения не работают. Это нужно сначала извлечь номер, потом подставить его в новые запросы.

  Ответить  
 
 автор: pautina   (26.12.2011 в 13:57)   письмо автору
5.2 Кб
 
   для: cheops   (26.12.2011 в 12:45)
 

Как это сделать не подскажете? файл таблицы я прикрепил.

  Ответить  
 
 автор: cheops   (26.12.2011 в 14:00)   письмо автору
 
   для: pautina   (26.12.2011 в 13:57)
 

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

  Ответить  
 
 автор: pautina   (26.12.2011 в 14:40)   письмо автору
 
   для: cheops   (26.12.2011 в 14:00)
 

Давайте сделаем через php обработчик, не подскажете какой код использовать?

  Ответить  
 
 автор: cheops   (26.12.2011 в 15:05)   письмо автору
 
   для: pautina   (26.12.2011 в 14:40)
 

Если не сложно приведите структуру таблицы zagolovok, у неё первичный ключ есть? За что там можно зацепиться, чтобы различать строки друг от друга?

  Ответить  
 
 автор: kosta_in_net   (26.12.2011 в 16:15)   письмо автору
 
   для: cheops   (26.12.2011 в 15:05)
 

подозрваю, что задача в корне не верна. "Нужно из этого участка кода оставить только ссылку"... Ссылки нужно выдергивать с помощью ПХП, а не через запросы... А еще лучше сделать для них специальное поле. А еще лучше... Сделать все совершенно по другому. Но для этого нужно знать, что именно хранится и зачем выдергивается

  Ответить  
 
 автор: pautina   (26.12.2011 в 17:21)   письмо автору
 
   для: kosta_in_net   (26.12.2011 в 16:15)
 

Структура таблицы такая (таблица category1, вытаскиваем ссылки из Field 2)

CREATE TABLE IF NOT EXISTS category1 (
    `ID` VARCHAR(255),
    `Field 1` VARCHAR(255),
    `Image URL 1` VARCHAR(255),
    `Field 2` VARCHAR(255),
    `Автор/Переводчик` VARCHAR(255),
    `Сложность` VARCHAR(255),
    `Field 3` VARCHAR(255)) TYPE=MyISAM;

INSERT IGNORE INTO category1 (`ID`,`Field 1`,`Image URL 1`,`Field 2`,`Автор/Переводчик`,`Сложность`,`Field 3`) VALUES  
('1','Уроки Photoshop','images\\mini_19.jpg','<A href=\"lessons.php?rub=1&amp;id=1689\">Создаём абстрактное золотое кольцо в Фотошоп</A>','','','В этом уроке вы узнаете, как при помощи кистей дыма сделать абсткатное кольцо со световыми эффектами.'),
('2','Уроки Photoshop','images\\mini_20.jpg','<A href=\"lessons.php?rub=1&amp;id=1677\">Создай экспрессивную космическую иллюстрацию в Фотошоп</A>','','','В этом уроке вы узнаете, создать интересную иллюстрацию, используя различные техники, световые эффекты, цветокоррекцию.'),
('3','Уроки Photoshop','images\\mini_1.gif','<A href=\"lessons.php?rub=1&amp;id=1661\">Создай светящегося супергероя в Фотошоп</A>','','','В этом уроке вы узнаете, как обычную иллюстрацию превратить в ретро-футуристическую художественную работу, а так же как сделать световой эффект быстрого движения.'),
('4','Уроки Photoshop','images\\mini_21.jpg','<A href=\"lessons.php?rub=1&amp;id=1641\">Создаём абстрактный постер в Фотошоп</A>','','','В этом уроке вы узнаете, как создать яркую абстракную иллюстрацию при использовании стоковых изображений и инструментов Photoshop.'),
('5','Уроки Photoshop','images\\mini_22.jpg','<A href=\"lessons.php?rub=1&amp;id=1608\">Девушка в брызгах воды</A>','','','В этом Фотошоп уроке Вы узнаете, как сделать эффектную иллюстрацию с девушкой в брызгах воды.'),
('6','Уроки Photoshop','images\\mini_23.jpg','<A href=\"lessons.php?rub=1&amp;id=1607\">Создай абстракцию из фото в Фотошоп</A>','','','В этом уроке вы узнаете, как, при помощи различных кистей и текстур, сделать интересную абстрактную иллюстрацию.'),
('7','Уроки Photoshop','images\\mini_24.jpg','<A href=\"lessons.php?rub=1&amp;id=1549\">Брейк-данс с Фотошоп</A>','','','В этом уроке вы узнаете, как, при помощи кистей и фигур, сделать динамическую и абстрактную иллюстрацию.'),
('8','Уроки Photoshop','images\\mini_25.jpg','<A href=\"lessons.php?rub=1&amp;id=1523\">Сделай стильный постер в Фотошоп</A>','','','В этом уроке мы будем создавать постер, в основе которого будет символ Инь-Янь.'),
('9','Уроки Photoshop','images\\mini_26.jpg','<A href=\"lessons.php?rub=1&amp;id=1521\">Девушка с гитарой в Фотошоп</A>','','','В этом уроке мы создадми динамичную иллюстрацию, дополненную разнообразными эффектами.'),
('10','Уроки Photoshop','images\\mini_27.jpg','<A href=\"lessons.php?rub=1&amp;id=1515\">Рисуем на запотевшем стекле в Фотошоп - 2</A>','','','В этом уроке вы узнаете, как сделать эффект запотевшего окна с помощью кистей, фильтров и стилей слоя.'),
('11','Уроки Photoshop','images\\mini_28.jpg','<A href=\"lessons.php?rub=1&amp;id=1477\">Создай абстрактную туманность в Фотошоп</A>','','','В этом уроке Вы узнаете, как создать абстрактную туманность, используя текстуру и фильтры.'),
('12','Уроки Photoshop','images\\mini_29.jpg','<A href=\"lessons.php?rub=1&amp;id=1476\">Создай иллюстрацию с эффектом кристаллизации в Фотошоп</A>','','','В этом уроке вы узнаете, как создать интересную иллюстрацию с брызгами воды и эффектом кристализации.'),
('13','Уроки Photoshop','images\\mini_30.jpg','<A href=\"lessons.php?rub=1&amp;id=1473\">Создай яркую иллюстрацию из своего фото в Фотошоп</A>','','','В этом уроке Вы узнаете, как с помощью световых эффектов сделать яркую иллюстрацию.'),
('14','Уроки Photoshop','images\\mini_31.jpg','<A href=\"lessons.php?rub=1&amp;id=1472\">Создаём эффект калейдоскопа в Фотошоп</A>','','','В этом уроке Вы узнаете, как, комбинируя базовые цвета, формы и кисти, создать эффект яркого красочного калейдоскопа.'),
('15','Уроки Photoshop','images\\mini_32.jpg','<A href=\"lessons.php?rub=1&amp;id=1463\">Сделай в Фотошоп бэкграунд в стиле техно</A>','','','В этом уроке вы узнаете, как создать интересный фон в стиле техно.'),
('16','Уроки Photoshop','images\\mini_33.jpg','<A href=\"lessons.php?rub=1&amp;id=1461\">Создай радужный эффект в Фотошоп</A>','','','В этом уроке Вы узнаете, как создать эффект, напоминающий северное сияние.'),
('17','Уроки Photoshop','images\\mini_34.jpg','<A href=\"lessons.php?rub=1&amp;id=1458\">Создаём в Фотошоп стильную иллюстрацию из фото</A>','','','В этом уроке Вы узнаете, как, при помощи корректирующих слоёв и гранж кистей, сделать интересную иллюстрацию из фото.'),
('18','Уроки Photoshop','images\\mini_35.jpg','<A href=\"lessons.php?rub=1&amp;id=1454\">Создай в Фотошоп красочный постер со световыми эффектами</A>','','','В этом уроке вы узнаете, как создать цветной абстрактный постер с эффектом старины и световыми спецэффектами.'),
('19','Уроки Photoshop','images\\mini_36.jpg','<A href=\"lessons.php?rub=1&amp;id=1450\">Создай красочный эффект в Фотошоп</A>','','','В этом уроке вы узнаете, как при помощи абстрактных кистей и фигур добиться интересного эффекта.'),
('20','Уроки Photoshop','images\\mini_37.jpg','<A href=\"lessons.php?rub=1&amp;id=1424\">Магия световых эффектов в Фотошоп</A>','','','В этом уроке мы продолжим учиться добавлять световые эффекты на фото.')

Мне нужно оставить только адреса ссылок
lessons.php?rub=1&amp;id=1689
lessons.php?rub=1&amp;id=1677
lessons.php?rub=1&amp;id=1661
lessons.php?rub=1&amp;id=1641
lessons.php?rub=1&amp;id=1608
lessons.php?rub=1&amp;id=1607

либо из Field 2 вырезать, при помощи php обработчика, либо новое поле создавать, лишь бы работало.
Такой задачи ещё не встречал и как сделать не понятно.

  Ответить  
 
 автор: kosta_in_net   (26.12.2011 в 18:25)   письмо автору
 
   для: pautina   (26.12.2011 в 17:21)
 

Нужно выбрать данные поля `Field 2`, а затем парсить через ПХП.
Допустим, $string содержит данные поля `Field 2`. Тогда:
preg_match('/A href="(lessons.php?[^"]*)">/', $string,$matches);
$matches[1] содержит ссылку, начинающуюся с lessons.php? (можно убрать это начало и брать все найденные ссылки). Полученные урлы полезно вписать в новое поле, чтоб больше не заниматься глупостями
П. С. Работу кода не проверял, могут быть опечатки и т. д.

  Ответить  
 
 автор: cheops   (26.12.2011 в 18:48)   письмо автору
 
   для: pautina   (26.12.2011 в 17:21)
 

Тогда можно начать отталкиваться от следующей схемы
<?php
  
...
  
$query "SELECT * FROM category1";
  
$cat mysql_query($query);
  if(!
$cat) exit("Ошибка выполнения запроса - ".mysql_error()."<br />".$query);
  if(
mysql_num_rows($cat))
  {
    while(
$catagory mysql_fetch_array)
    {
      
// Осуществляем преобразование URL
      
...
      
// Обновляем запрос
      
$catagory['Field 2'] = mysql_escape_string($catagory['Field 2']);
      
$query "UPDATE category1
                SET `Field 2` = '
{$catagory['Field 2']}'
                WHERE ID = 
{$catagory['ID']}";
      if(!
mysql_query($query))
      {
        exit(
"Ошибка выполнения запроса - ".mysql_error()."<br />".$query);
      }
    }
  }
  ...
?>

  Ответить  
 
 автор: pautina   (26.12.2011 в 19:04)   письмо автору
 
   для: cheops   (26.12.2011 в 18:48)
 

А что ставить вместо ...?
// Осуществляем преобразование URL - здесь что имеется в виду?
Мне нужно просто этот скрипт запустить?

  Ответить  
 
 автор: cheops   (26.12.2011 в 19:06)   письмо автору
 
   для: pautina   (26.12.2011 в 19:04)
 

Здесь нужно осуществить преобразование URL, например, при помощи preg_replace(). При отладки лучше сначала не осуществлять реальных преобразований, а выводить их на экран. Если составление регулярного выражения вызывает сложности лучше завести тему на форуме Регулярные выражения.

  Ответить  
 
 автор: pautina   (27.12.2011 в 06:30)   письмо автору
 
   для: cheops   (26.12.2011 в 19:06)
 

Для извлечения url адреса на странице можно использовать

<?php 
 $str 
file_get_contents("http://foxweb.net.ru/"); 
preg_match_all("!<a[^>]*\shref=[\"']?([^>\"'#\s]+)[\"']?[^>]*>!is",$str,$matches); 
 echo 
"<pre>"
 foreach(
$matches[1] as $line
 echo 
"$line\n"
 echo 
"</pre>"
?>

По регулярным выражениям можно использовать записи http://softtime.ru/forum/read.php?id_forum=6&id_theme=84056&page=1
lessons.php?rub=1&amp;id=[0-9]

[а-яА-Я]

Как мне собрать всё вместе с вашим участком кода

  Ответить  
 
 автор: kosta_in_net   (27.12.2011 в 12:41)   письмо автору
 
   для: pautina   (27.12.2011 в 06:30)
 

Я же писал:

Допустим, $string содержит данные поля `Field 2`. Тогда:
preg_match('/A href="(lessons.php?[^"]*)">/', $string,$matches);
$matches[1] содержит ссылку, начинающуюся с lessons.php? (можно убрать это начало и брать все найденные ссылки)

Это и вставить вместо
// Осуществляем преобразование URL
...

  Ответить  
 
 автор: pautina   (27.12.2011 в 16:13)   письмо автору
5.2 Кб
 
   для: kosta_in_net   (27.12.2011 в 12:41)
 

В итоге код будет

<?php 

  $query 
"SELECT * FROM category1"
  
$cat mysql_query($query); 
  if(!
$cat) exit("Ошибка выполнения запроса - ".mysql_error()."<br />".$query); 
  if(
mysql_num_rows($cat)) 
  { 
    while(
$catagory mysql_fetch_array
    { 
      
// Осуществляем преобразование URL 
      
preg_match('/A href="(lessons.php?[^"]*)">/'$string,$matches);
      
// Обновляем запрос 
      
$catagory['Field 2'] = mysql_escape_string($catagory['Field 2']); 
      
$query "UPDATE category1 
                SET `Field 2` = '
{$catagory['Field 2']}
                WHERE ID = 
{$catagory['ID']}"
      if(!
mysql_query($query)) 
      { 
        exit(
"Ошибка выполнения запроса - ".mysql_error()."<br />".$query); 
      } 
    } 
  } 

?>

Насколько он рабочий, как проверить код, просто как скрипт запустить?
файл создающий таблицу из которой нужно вытащить ссылки прикрепил, таблица создатся автоматом при записи запроcа (закладка sql в phpMyAdmin).
Ни могли бы Вы проверить код?

  Ответить  
 
 автор: pautina   (28.12.2011 в 06:04)   письмо автору
 
   для: pautina   (27.12.2011 в 16:13)
 

Запустил код как скрипт
выходит ошибка
Warning: mysql_query() [function.mysql-query]: Access denied for user ''@'localhost' (using password: NO) in M:\home\photoshop-portal\www\link_category.php on line 4

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in M:\home\photoshop-portal\www\link_category.php on line 4
Ошибка выполнения запроса - Access denied for user ''@'localhost' (using password: NO)
SELECT * FROM category1
Как её исправить?

  Ответить  
 
 автор: kosta_in_net   (09.01.2012 в 18:16)   письмо автору
 
   для: pautina   (28.12.2011 в 06:04)
 

Вы не подключились к базе. Вам показали часть кода. отвечающую за выборку ссылок. Но это не значит, что к базе не требуется подключаться

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования