|
|
|
|
|
для: Sfinks
(29.05.2012 в 15:22)
| | МАХ поможет. )
Но предположение об удалении, это как раз то, что и определяет бесполезность этой затеи в том виде, в котором хочет автор ее.
На уникальность (в кавычках) я говорил автору, вроде бы как побоку это. Если даже и будет принято мое замечание во внимание, и в конечном итоге будет так:
url/id/yazyk_mozhno_slomat_ot_takogo_kotoroe_nafik_komu_nuzhno_120
то это все равно не решает проблемы такой "уникальности", значит надо добавлять еще бухгалтера ведущего отчет прихода/расхода.
Вот и возникает вопрос - это для чего, если практическая ценность от этого нулевая и информативная составляющая тоже близка к нулю? Остается только и вспоминать о верности высказывания - "охота пуще неволи". | |
|
|
|
|
|
|
|
для: The Electronic Cat
(29.05.2012 в 14:07)
| | Хотя, если предположить, что в таблице были name_1, name_2, name_3, name_4, а потом name_3 удалили, то ваш вариант уже сработает не правильно и добавит nаme_4 второй раз. | |
|
|
|
|
|
|
|
для: The Electronic Cat
(29.05.2012 в 14:07)
| | Если бы я начиная писать запрос знал о существовании поля cyr и откуда там ноги растут, то и запрос составил бы на основе его значения.
Т.е. то что вы написали, только на уровне SQL. И это было бы быстрее.
Но ТС же не сказал сразу ничего. Как и из всех пришлось клещами вытягивать. | |
|
|
|
|
|
|
|
для: 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.И, в любом случае, индекс бы не помешал на строке в таблице при такой организации структуры. | |
|
|
|
|
|
|
|
для: Sfinks
(28.05.2012 в 16:03)
| | Не в ту ветку | |
|
|
|
|
|
|
|
для: confirm
(28.05.2012 в 18:49)
| | А я начал с того что не стОит ) | |
|
|
|
|
|
|
|
для: Sfinks
(28.05.2012 в 18:46)
| | Да, для упражнения конечно мощно, но стоит ли все этого? )) | |
|
|
|
|
|
|
|
для: confirm
(28.05.2012 в 18:26)
| | Однако вы тут настрочить успели, пока я запрос составлял.... ))) | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: Bvz
(28.05.2012 в 18:23)
| | Ну да. Можно конечно "прошерстить" и строки ваши, но с помощью рег.выражения, но ведь это утяжеление выполнения запроса, и пусть вставка данных реже чем вывод, все равно стоит ли?
А если в отдельном поле, то достаточно запросить число записей (значения то без номеров одинаковы), и N-1, даст вам следующий номер.
PS. Только учтите, что это не уникальность, то есть, если запись N удалена, то такая "уникальность" нарушается, ибо добавление нового примет удаленный номер. И если кто-то сохранил ссылку на "старое", то попадет уже совсем не туда. | |
|
|
|
|