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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: уникальное значение тектового поля как сделать

Сообщения:  [1-10]    [11-20]   [21-30]  [31-32] 

 
 автор: confirm   (30.05.2012 в 01:12)   письмо автору
 
   для: Sfinks   (29.05.2012 в 15:22)
 

МАХ поможет. )
Но предположение об удалении, это как раз то, что и определяет бесполезность этой затеи в том виде, в котором хочет автор ее.
На уникальность (в кавычках) я говорил автору, вроде бы как побоку это. Если даже и будет принято мое замечание во внимание, и в конечном итоге будет так:
url/id/yazyk_mozhno_slomat_ot_takogo_kotoroe_nafik_komu_nuzhno_120
то это все равно не решает проблемы такой "уникальности", значит надо добавлять еще бухгалтера ведущего отчет прихода/расхода.
Вот и возникает вопрос - это для чего, если практическая ценность от этого нулевая и информативная составляющая тоже близка к нулю? Остается только и вспоминать о верности высказывания - "охота пуще неволи".

  Ответить  
 
 автор: Sfinks   (29.05.2012 в 15:22)   письмо автору
 
   для: The Electronic Cat   (29.05.2012 в 14:07)
 

Хотя, если предположить, что в таблице были name_1, name_2, name_3, name_4, а потом name_3 удалили, то ваш вариант уже сработает не правильно и добавит nаme_4 второй раз.

  Ответить  
 
 автор: Sfinks   (29.05.2012 в 14:57)   письмо автору
 
   для: The Electronic Cat   (29.05.2012 в 14:07)
 

Если бы я начиная писать запрос знал о существовании поля cyr и откуда там ноги растут, то и запрос составил бы на основе его значения.
Т.е. то что вы написали, только на уровне SQL. И это было бы быстрее.
Но ТС же не сказал сразу ничего. Как и из всех пришлось клещами вытягивать.

  Ответить  
 
 автор: The Electronic Cat   (29.05.2012 в 14:07)   письмо автору
 
   для: Sfinks   (28.05.2012 в 18:46)
 

Есть подозрение, что

<?php
$sql 
"select count(*) from `tbl` where `cyr`='$cyr'";
list(
$count) = mysql_fetch_row(mysql_query($sql));
settype('count''int');
$trs $count 'name_'. (++$count) : 'name' ;
mysql_query("insert into `tbl` set `cyr`='$cyr', `trs`='$trs'");

сработает быстрее, чем это sql-великолепие)
Но упражнение зачетное.

ps.И, в любом случае, индекс бы не помешал на строке в таблице при такой организации структуры.

  Ответить  
 
 автор: The Electronic Cat   (29.05.2012 в 14:03)   письмо автору
 
   для: Sfinks   (28.05.2012 в 16:03)
 

Не в ту ветку

  Ответить  
 
 автор: Sfinks   (28.05.2012 в 19:03)   письмо автору
 
   для: confirm   (28.05.2012 в 18:49)
 

А я начал с того что не стОит )

  Ответить  
 
 автор: confirm   (28.05.2012 в 18:49)   письмо автору
 
   для: Sfinks   (28.05.2012 в 18:46)
 

Да, для упражнения конечно мощно, но стоит ли все этого? ))

  Ответить  
 
 автор: Sfinks   (28.05.2012 в 18:49)   письмо автору
 
   для: confirm   (28.05.2012 в 18:26)
 

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

  Ответить  
 
 автор: Sfinks   (28.05.2012 в 18:46)   письмо автору
 
   для: Bvz   (28.05.2012 в 16:14)
 

Нужно, конечно, послушать confirm'a и пересмотреть структуру БД....
Но мне охото было поупражняться в SQL =)))
<?php
  
// пусть таблица имеет имя tbl
  // поле, которое нас интересует называется f1
  // также в таблице есть еще 2 текстовых поля f2 и f3
  // и одно целочисленное f4

  // значения, которые нужно вставить
  
$val_1 'name';  // для столбца f1
  
$val_2 'fgh';   // для столбца f2
  
$val_3 'jkl';   // для столбца f3
  
$val_4 123;     // для столбца f4
  // в запросе нужно исправить имена таблицы (tbl) и полей (f1,f2,f3,f4) на реальные 
  
$sql "INSERT INTO tbl(f1,f2,f3,f4)
          SELECT CASE WHEN T3.f1 IS NULL THEN nm
                      WHEN T2.f1 IS NULL THEN CONCAT(nm,'_1')
                      ELSE CONCAT(nm,'_',max(CAST(substr(T2.f1,length(nm)+2) AS UNSIGNED))+1)
                 END      f1
                ,'
$val_2' f2
                ,'
$val_3' f3
                , 
$val_4  f4
          FROM (SELECT '
$val_1' nm)T1
          LEFT JOIN tbl T2 ON T2.f1 LIKE CONCAT(nm,'\_%')
          LEFT JOIN tbl T3 ON T3.f1 = nm"
;
  
mysql_query($sql);
?>

  Ответить  
 
 автор: confirm   (28.05.2012 в 18:26)   письмо автору
 
   для: Bvz   (28.05.2012 в 18:23)
 

Ну да. Можно конечно "прошерстить" и строки ваши, но с помощью рег.выражения, но ведь это утяжеление выполнения запроса, и пусть вставка данных реже чем вывод, все равно стоит ли?
А если в отдельном поле, то достаточно запросить число записей (значения то без номеров одинаковы), и N-1, даст вам следующий номер.

PS. Только учтите, что это не уникальность, то есть, если запись N удалена, то такая "уникальность" нарушается, ибо добавление нового примет удаленный номер. И если кто-то сохранил ссылку на "старое", то попадет уже совсем не туда.

  Ответить  

Сообщения:  [1-10]    [11-20]   [21-30]  [31-32] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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