ugrás a tartalomhoz

Adat duplikáció elkerülése mysql feltöltéskor

speeedfire · 2010. Aug. 30. (H), 17.12
Üdv!

Fel szeretnék tölteni egy adatot az adatbázisba, viszont ha már szerepel akkor nevezze el másik néven és azt is ellenőrízze le egészen addig amíg olyan adatot nem töltök fel ami nincs a táblában.

pl:
fel akarom tölteni, hogy egy, ami már fent van az adatbázisban, ekkor változtassa meg egy-0-ra és ha nincs fent akkor töltse fel, ha van egy-0 akkor egy-1 stb


Egy ilyet szenvedtem össze de nem sikerült normálisra megoldani.

$id =  mysql_insert_id() ;

if ( isset($_POST['alias']) and !empty($_POST['alias'])) {
$alias = angol($_POST['alias']);
}
else {
$alias = angol($_POST['cim']);
}

$keres = mysql_query("select * from alias where eng = '".$alias."' ");

if (!$keres) {
 die('Hiba: ' . mysql_error());
}

$i=0;
//echo $alias;

$kereses = 0;

  while ( $kereses == 0 ) {

$alias .= '-'.$i;
$i++;
$kereses = mysql_num_rows($keres);

}

//echo $alias;

$url = 'tartalom.php&tipus='.$tipus.'&id='.$id.'';
$sql2 = mysql_query("insert into alias (url,eng,tid)
values (
'".mysql_real_escape_string($url)."',
'".mysql_real_escape_string($alias)."',
'".mysql_real_escape_string($id)."' ) ");

if (!$sql2) {
 die('Hiba: ' . mysql_error());
}
 
1

Meglett a megoldás: $kereses

speeedfire · 2010. Aug. 30. (H), 17.52
Meglett a megoldás:

$kereses = 1;

  while ( $kereses > 0 ) {

if ($i > 0) {
$alias = str_replace('-'.end(explode('-',$alias)),'',$alias) ;
}

$alias .= '-'.$i;
$i++;

$keres = mysql_query("select * from alias where eng = '".$alias."' ");

if (!$keres) {
 die('Hiba: ' . mysql_error());
}

$kereses = mysql_num_rows($keres);

}
2

REGEXP

Poetro · 2010. Aug. 30. (H), 18.20
Nem próbáltam ki, de valami ilyesmi lenne:
<?php
$value = 'egy';
$length = strlen($value) + 1;
$result = mysql_query(
  sprintf(
    "SELECT field FROM table WHERE field REGEXP '^%s(-[0-9]+)?$'",
    preg_quote(mysql_real_escape_string($value), '/')
  )
);
$max = -1;
while ($row = mysql_fetch_row($result)) {
  $sub = substr($row[0], $length);
  if (!$sub) {
    $max = max($max, 0);
  }
  else {
    $max = max($max, $sub + 1);
  }
}
$newvalue = $value;
if ($max > - 1) {
  $newvalue += '-'. $max;
}
?>