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

Форум MySQL

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

 

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

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

тема: вывод в тексте одно слово с заменой
 
 автор: xpom   (08.07.2008 в 13:10)   письмо автору
 
 

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

   
 
 автор: xpom   (08.07.2008 в 16:52)   письмо автору
 
   для: xpom   (08.07.2008 в 13:10)
 

Помогите плиз...

   
 
 автор: Trianon   (08.07.2008 в 17:26)   письмо автору
 
   для: xpom   (08.07.2008 в 13:10)
 

Вы бы привели пример....
На голом SQL такие вещи делать неудобно.
Проще будет получить данные и выполнить замены на php-уровне.

   
 
 автор: xpom   (09.07.2008 в 12:11)   письмо автору
 
   для: Trianon   (08.07.2008 в 17:26)
 

Вот смотрите, одна таблица, которая содержит выводимый текст:


CREATE TABLE `opis` (
  `OID` int(11) NOT NULL auto_increment,
  `San` int(11) NOT NULL default '0',
  `OName` varchar(40) default NULL,
  `discript` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`OID`),
  KEY `San` (`San`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp125 ;


получаем текст из таблицы в рнр:


$res = mysql_query("SELECT * FROM opis",$db);
  if(!$res) exit("Ошибка в синтаксисе запроса");

if ($myrow = mysql_fetch_row($res)) {
            $dis=$myrow[3];        
   
}


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


CREATE TABLE IF NOT EXISTS sity (
      STID                 INTEGER NOT NULL AUTO_INCREMENT,
      STName        VARCHAR(30),
      Primary Key (STID)
    )

вот как менять в тексте, который будет браться из первой таблицы ( $dis=$myrow[3]; ), словами из второй таблицы?

   
 
 автор: xpom   (09.07.2008 в 14:42)   письмо автору
 
   для: xpom   (09.07.2008 в 12:11)
 

Как же можно заменять слоа в тексте, помогите пожалуйста, может кто знает..???

   
 
 автор: Trianon   (09.07.2008 в 14:51)   письмо автору
 
   для: xpom   (09.07.2008 в 12:11)
 

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

   
 
 автор: xpom   (09.07.2008 в 16:13)   письмо автору
 
   для: Trianon   (09.07.2008 в 14:51)
 

таблица с текстом имеет следующий обычный текст:

INSERT INTO `opis` VALUES(5, 4, 'Увлечение', 'идет описание... и имеется название города... Москва ... описание... Москва... описание, ');
INSERT INTO `opis` VALUES(5, 7, 'Отдых', 'идет описание... и имеется название города... Москва ... описание... Москва... описание, ');


и вот дамп таблицы с городами:


INSERT INTO `opis` VALUES(1, 'Омск');
INSERT INTO `opis` VALUES(5,  'Новосибирс');


Нужно вывести текст первой таблицы (discript) с заменой города Москва на Омск, в другом варианте на Новосибирск, в зависимости от того какое значение имеет переменная в адресной строке...

вот например выводим:


$res = mysql_query("SELECT opis FROM Cat
             WHERE OID=".$_GET['op'],$db);
            if(!$res) exit("Ошибка - ".mysql_error());
            if ($myrow = mysql_fetch_row($res)) {
            $opis=$myrow[3];
            }
            else {
            $opis='no';
            }
echo "$opis";

ну это я просто вывел а нужно с заменой города...

   
 
 автор: Trianon   (09.07.2008 в 16:28)   письмо автору
 
   для: xpom   (09.07.2008 в 16:13)
 

Из приведенного содержимого таблиц никак не выходит, что должно меняться именно слово "Москва"

   
 
 автор: xpom   (09.07.2008 в 18:08)   письмо автору
 
   для: Trianon   (09.07.2008 в 16:28)
 

Да меняться должно слово "Москва".
Ну может есть какие ошибки...

   
 
 автор: ....   (09.07.2008 в 19:54)
 
   для: xpom   (09.07.2008 в 18:08)
 

(initialization) 0.0000192
Opening tables 0.0000557
System lock 0.0000022
Table lock 0.0000035
init 0.0000057
optimizing 0.0000027
statistics 0.000005
preparing 0.0000047
executing 0.000036
Sending data 0.0000275
end 0.0000042
query end 0.0000035
freeing items 0.0000065
closing tables 0.000003
removing tmp table 0.0000232
closing tables 0.000006
logging slow query 0.0000027


Отображает строки 0 - 5 (6 всего, запрос занял 0.0053 сек.)

при первом запросе , не использующем кэшированные данные


(SELECT `OID`, 
`San`, `OName`, REPLACE(discript, 'Москва', (SELECT STName FROM sity WHERE STID=1)) FROM opis)
UNION ALL
(SELECT `OID`, 
`San`, `OName`, REPLACE(discript, 'Москва', (SELECT STName FROM sity WHERE STID=5)) FROM opis)

   
 
 автор: Trianon   (09.07.2008 в 19:59)   письмо автору
 
   для: ....   (09.07.2008 в 19:54)
 

До чего полезное дело - на таблице из трех строк запускать бенчмарки.

   
 
 автор: ,,,,   (09.07.2008 в 20:05)
 
   для: Trianon   (09.07.2008 в 19:59)
 

я о том-же , всего ничего данных , а такое большевастенькое время выполнения )

   
 
 автор: Trianon   (09.07.2008 в 20:12)   письмо автору
 
   для: ,,,,   (09.07.2008 в 20:05)
 

Каков запрос - таков ответ.
Тогда уж:
SELECT `OID`, `San`, `OName`, REPLACE(discript, 'Москва', STName) FROM opis,sity 


Не люблю кросс-джоинов, но по-моему, это куда лучше, чем Ваш UNION

   
 
 автор: Trianon   (09.07.2008 в 19:55)   письмо автору
 
   для: xpom   (09.07.2008 в 16:13)
 

То есть получить строку с текстом в переменную $opis Вы умеете.
Теперь, помимо этого, получите точно также из другой таблицы строку с текстом в переменную $gorod.
Останется лишь заменить слово:
$opis = str_replace('Москва', $gorod, $opis);
После чего - вывести.

   
 
 автор: xpom   (09.07.2008 в 20:33)   письмо автору
 
   для: Trianon   (09.07.2008 в 19:55)
 

Спасибо большое, вроде все понятненько...заменяет команда str_replace, я так понял.
Буду пробовать, еще раз спасибо Вам...

   
Rambler's Top100
вверх

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