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.
25 svar · 514 visningar · startad av mikael_a
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
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.
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
Någon som vill visa mig?
$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;
tack du är en ängel... skall testa nu på en gång
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
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;
} else {
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
$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.
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
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);
?>
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);
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
<?
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
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.
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