webForumDet fria alternativet

om "namn" finns sätt samma id... hur gör man detta?

Databaser & SQL

25 svar · 514 visningar · startad av mikael_a

Medlem sedan mars 2000475 inlägg
Frågan#1

Hej,

Jag har skapat en MySQL databas som innehåller, flera olika tabeller...

tex: Adress som innehåller adresser, och adress_medlem som innehåller id för de olika personerna.

hur skall en SQL-sats se ut om tex person 1 matar in "test gatan 2" som gatuadress och sedan matar person 2 in samma adress. denna får id 1 i tabell adress.

men id för person 2 skall ju vara det samma som för person 1, så att ingen dubbellaggring kan förekomma.


//kopplar upp...

    $db = mysql_connect("localhost","123","123") or die("Det gick inte: ".mysql_error());
 	
     //väljer db...
     mysql_select_db("miab02",$db);

     $sql = "INSERT INTO Medlem VALUES('', '$Fnamn', '$Enamn')";
     mysql_query($sql);
     $Medlem_Id = mysql_insert_id();

     $sql = "INSERT INTO Adress VALUES('', '$Gata', '$Postnummer', '$Stad')";
     mysql_query($sql);
     $Adress_Id = mysql_insert_id();
     echo $Adress_Id;

     $sql = "INSERT INTO Medlem_Adress VALUES('$Medlem_Id', '$Adress_Id')";
     mysql_query($sql);

så ser min kod ut nu... hoppas att ni förstår

Medlem sedan dec. 200012 464 inlägg
#2

Det verkar väldigt onödigt att lagra adress separat.

Det du behöver göra är, innan du lagrar en adress så får du göra en slagning efter id. Om adressen finns så använd det id du får upp annars så gör du insert.

Medlem sedan mars 2000475 inlägg
#3

Jo, men jag håller bara på att försöka lära mig...

Jag har tre tabeller nu...

Medlem, Adress och Medlem_Adress

Medlem innehåller: förnamn och efternamn
Adress innehåller: gata, postnummer och stad
medlem_adress innehåller: medlem_id och adress_id

dessa uppdateras enligt ovanstående SQL sats, men om nu tex "testgatan 1" redan har id 1 vill jag att om en annan person också bor på samma gata för samma id...

micke

Medlem sedan mars 2000475 inlägg
#4

Någon som vill visa mig?

Medlem sedan dec. 200012 464 inlägg
#5
$sql = "select  Adress_Id from Adress 
where gata = '$Gata' and Postnummer = '$Postnummer'
and Stad = '$Stad';
$c = mysql_query($sql) or die(mysql_error());
if ( $r = mysql_fetch_row($c)) {
   $Adress_Id = $r[0];
} else

$sql = "INSERT INTO Adress VALUES('', '$Gata', '$Postnummer', '$Stad')";

     mysql_query($sql);

     $Adress_Id = mysql_insert_id();
}
     echo $Adress_Id;
Medlem sedan mars 2000475 inlägg
#6

tack du är en ängel... skall testa nu på en gång

Medlem sedan mars 2000475 inlägg
#7

LarsG, skulle du vilja kommentera koden...

är det bara att lägga till mina resterande rader efter din? så att alla tabeller uppdateras... nu uppdateras ju bara Adress...

micke

Medlem sedan mars 2000475 inlägg
#8

jag får Parse error line 30


   	$sql = "SELECT  Adress_Id from Adress
   where gata = '$Gata' and Postnummer = '$Postnummer'
   and Stad = '$Stad';
   $c = mysql_query($sql) or die(mysql_error());
   if ( $r = mysql_fetch_row($c)) {
      $Adress_Id = $r[0];
   } else

RAD 30 -->     $sql = "INSERT INTO Medlem VALUES('', '$Fnamn', '$Enamn')";
     mysql_query($sql);
     $Medlem_Id = mysql_insert_id();

     $sql = "INSERT INTO Adress VALUES('', '$Gata', '$Postnummer', '$Stad')";
     mysql_query($sql);
     $Adress_Id = mysql_insert_id();

     $sql = "INSERT INTO Medlem_Adress VALUES('$Medlem_Id', '$Adress_Id')";
     mysql_query($sql);
   }
        echo $Adress_Id;
Medlem sedan dec. 200012 464 inlägg
#9

} else {

Medlem sedan mars 2000475 inlägg
#10

nope... fortfarande rad 30...


<?

    echo $sql;

    //kopplar upp...

    $db = mysql_connect("localhost","xxx","xxx") or die("Det gick inte: ".mysql_error());
 	
     //väljer db...
     mysql_select_db("miab02",$db);

   	$sql = "SELECT  Adress_Id from Adress
   where gata = '$Gata' and Postnummer = '$Postnummer'
   and Stad = '$Stad';
   $c = mysql_query($sql) or die(mysql_error());
   if ( $r = mysql_fetch_row($c)) {
      $Adress_Id = $r[0];
   } else {

     $sql = "INSERT INTO Medlem VALUES('', '$Fnamn', '$Enamn')";
     mysql_query($sql);
     $Medlem_Id = mysql_insert_id();

     $sql = "INSERT INTO Adress VALUES('', '$Gata', '$Postnummer', '$Stad')";
     mysql_query($sql);
     $Adress_Id = mysql_insert_id();

     $sql = "INSERT INTO Medlem_Adress VALUES('$Medlem_Id', '$Adress_Id')";
     mysql_query($sql);
   }
        echo $Adress_Id;

     echo "<br /><br />Affected rows:".mysql_affected_rows();
     echo "<br /><br />Förnamn...: $Fnamn";
	 echo "<br /><br />Efternamn.: $Enamn";
	 echo "<br /><br />Gata......: $Gata";
	 echo "<br /><br />Postnummer: $Postnummer";
	 echo "<br /><br />Stad......: $Stad";

mysql_close($db);

?>

micke

Medlem sedan dec. 200012 464 inlägg
#11
$sql = "SELECT  Adress_Id from Adress

   where gata = '$Gata' and Postnummer = '$Postnummer'

   and Stad = '$Stad'";

Missade en "

den här kodem

 $sql = "INSERT INTO Medlem VALUES('', '$Fnamn', '$Enamn')";

     mysql_query($sql);

     $Medlem_Id = mysql_insert_id();

skall flyttas så att den ligger utanför if-blocket.

Medlem sedan mars 2000475 inlägg
#12

nästan...

i tabellen medlem_adress får medlem_id värdet 0 fast adress_id stämmer...

medlem_id får sitt värde ifrån medlem, vars id kopplas till medlem_id i medlem_adress

Medlem sedan dec. 200012 464 inlägg
#13

Kommer det in rätt data i medlem?

Hur ser kodent ut nu?

Medlem sedan mars 2000475 inlägg
#14

Adress, Medlem har rätt värden, den enda tabellen som inte stämmer är medlem_adress och då medlem_id, som är noll


<?

    echo $sql;

    //kopplar upp...

    $db = mysql_connect("localhost","xxx","xxx") or die("Det gick inte: ".mysql_error());
 	//$db = mysql_connect("localhost","micke","12216408") or die("Det gick inte: ".mysql_error());

     //väljer db...
     mysql_select_db("miab02",$db);

   	$sql = "SELECT  Adress_Id from Adress
   where gata = '$Gata' and Postnummer = '$Postnummer'
   and Stad = '$Stad'";

   $c = mysql_query($sql) or die(mysql_error());
   if ( $r = mysql_fetch_row($c)) {
      $Adress_Id = $r[0];
   } else {

     $sql = "INSERT INTO Adress VALUES('', '$Gata', '$Postnummer', '$Stad')";
     mysql_query($sql);
     $Adress_Id = mysql_insert_id();

   }

		$sql = "INSERT INTO Medlem_Adress VALUES('$Medlem_Id', '$Adress_Id')";
    	mysql_query($sql);

        $sql = "INSERT INTO Medlem VALUES('', '$Fnamn', '$Enamn')";
		mysql_query($sql);
        $Medlem_Id = mysql_insert_id();

        echo $Adress_Id;

     echo "<br /><br />Affected rows:".mysql_affected_rows();
     echo "<br /><br />Förnamn...: $Fnamn";
	 echo "<br /><br />Efternamn.: $Enamn";
	 echo "<br /><br />Gata......: $Gata";
	 echo "<br /><br />Postnummer: $Postnummer";
	 echo "<br /><br />Stad......: $Stad";

mysql_close($db);

?>
Medlem sedan dec. 200012 464 inlägg
#15

Du gör insert i fel ordning. Byt ordning, så här

        $sql = "INSERT INTO Medlem VALUES('', '$Fnamn', '$Enamn')";

        mysql_query($sql);

$Medlem_Id = mysql_insert_id();

$sql = "INSERT INTO Medlem_Adress VALUES('$Medlem_Id', '$Adress_Id')";

        mysql_query($sql);
Medlem sedan mars 2000475 inlägg
#16

den lägger in rätt värden, men inte så som jag ville...

om jag skrev in samma adress men den fick olika id_nummer + att den räknade id nummret i tabellen ifrån fel håll
1
2
3
4
5
11
10

Medlem sedan mars 2000475 inlägg
#17

<?

    echo $sql;

    //kopplar upp...

    $db = mysql_connect("localhost","xxx","xxx") or die("Det gick inte: ".mysql_error());
 	//$db = mysql_connect("localhost","micke","12216408") or die("Det gick inte: ".mysql_error());

     //väljer db...
     mysql_select_db("miab02",$db);

   	$sql = "SELECT  Adress_Id from Adress
   where gata = '$Gata' and Postnummer = '$Postnummer'
   and Stad = '$Stad'";

   $c = mysql_query($sql) or die(mysql_error());
   if ( $r = mysql_fetch_row($c)) {
      $Adress_Id = $r[0];
   } else {

     $sql = "INSERT INTO Adress VALUES('', '$Gata', '$Postnummer', '$Stad')";
     mysql_query($sql);
     $Adress_Id = mysql_insert_id();

   }

		$sql = "INSERT INTO Medlem VALUES('', '$Fnamn', '$Enamn')";
		mysql_query($sql);
        $Medlem_Id = mysql_insert_id();

        $sql = "INSERT INTO Medlem_Adress VALUES('$Medlem_Id', '$Adress_Id')";
    	mysql_query($sql);

        echo $Adress_Id;

     echo "<br /><br />Affected rows:".mysql_affected_rows();
     echo "<br /><br />Förnamn...: $Fnamn";
	 echo "<br /><br />Efternamn.: $Enamn";
	 echo "<br /><br />Gata......: $Gata";
	 echo "<br /><br />Postnummer: $Postnummer";
	 echo "<br /><br />Stad......: $Stad";

mysql_close($db);

?>

du måste tycka jag är rätt jobbig ;) tacksam för din hjälp

Medlem sedan dec. 200012 464 inlägg
#18

Då är det väl något fel med select-satsen

Lägg till lite testutskrifter så att du ser vad som händer

    $sql = "SELECT  Adress_Id from Adress

   where gata = '$Gata' and Postnummer = '$Postnummer'

   and Stad = '$Stad'";

   echo "SQL:" . $sql . "<br>";

   $c = mysql_query($sql) or die(mysql_error());

   if ( $r = mysql_fetch_row($c)) {

      $Adress_Id = $r[0];
      echo "Adress_id " . $Adress_Id . 
     " hämtad från tabell. <br>";

   } else {

Vilket sekevensnummer som skapas för en post är helt irreellevant. Det enda som betyder något är att det är unikt. Om du vill kunna hålla reda på i vilken ordning som posterna lagts till så måste du ha en datetime kolumn.

Medlem sedan mars 2000475 inlägg
#19

jag har lagt till några andra data... men din sista skriver den inte ut

echo "Adress_id " . $Adress_Id .
" hämtad från tabell. <br>";

***

SQL:SELECT Adress_Id from Adress where gata = 'qw' and Postnummer = '1' and Stad = 'qw'
12

Affected rows:1

Förnamn...: qw

Efternamn.: qw

Gata......: qw

Postnummer: 1

Stad......: qw

Medlem sedan dec. 200012 464 inlägg
#20

Får du duplikat i adresstabellen?

Vad händer om du kör select-frågan separat?

271 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)