19. april 2008 - 18:49Der er
12 kommentarer og 2 løsninger
Tjekke om en given værdi eksiterer i MySQL database
Hej Eksperter
Jeg ønsker en smart måde at tjekke om en given værdi eksisterer i en bestemt tabel i min MySQL database. Hvis den ikke eksisterer skal jeg tilføje det og ellers skal der udskrives en fejl. Findes der sådan en funktion, der gør det jeg har brug for? Og i givet fald, hvad hedder den??
Sådan som jeg forstår det vil det flyde ud i at være ligeledes.
$query = mysql_query("SELECT * FROM database WHERE ting=$ting") or die (mysql_error());
if (0 < mysql_num_rows($query)) { echo "$ting findes i databasen"; } else { mysql_query("INSERT INTO database (ting) VALUES ($ting)"); echo "den er sat ind i databasen"; }
Det er nu ikke vider effektivt at lave en SELECT *.
$query = mysql_query("SELECT count(*) AS antal FROM database WHERE ting = $ting") or die(mysql_error()); $row = mysql_fetch_assoc($query);
if ($row['antal'] != 0) { echo "$ting findes i databasen"; } else { mysql_query("INSERT INTO database (ting) VALUES ($ting)"); echo "den er sat ind i databasen"; }
Tror jeg vælger din løsning showsource. Hvad er kommandoen, hvis man skal lave et felt unique fra en php-side? (Altså hvordan kan en bruger gøre det)
g1mzee: Hvis jeg havde valgt din løsning, som du skriver den, ville det ikke have virket. Hvis den ikke findes i databasen, vil $query'en jo give en fejl. Derfor skal det rettes til: $query = mysql_query("SELECT * FROM database WHERE ting=$ting");
nielle: Har aldrig set den syntax før ('count(*) AS antal'), retunerer den hvor mange rækker der er i $query'en? Altså kunne $row['antal'] være lig med 1??
> nielle: Har aldrig set den syntax før ('count(*) AS antal'), retunerer den hvor mange rækker der er i $query'en? Altså kunne $row['antal'] være lig med 1??
> Men det er vel ikke noget som skal gøres af de enkelte brugere?
Jeg er ved at lave et adminmodul til en kunde, han skal så automatisk kunne oprette en tabel og dermed også et UNIQUE felt.
>> nielle: Har aldrig set den syntax før ('count(*) AS antal'), retunerer den hvor >mange rækker der er i $query'en? Altså kunne $row['antal'] være lig med 1??
>Helt korrekt.
Er der så nogen egentlig forskel fra at bruge count(*) AS antal i stedet for mysql_num_rows?
> Er der så nogen egentlig forskel fra at bruge count(*) AS antal i stedet for mysql_num_rows?
Ja:
SELECT *
returnere alle data, også selvom man ikke skal bruge dem til noget.
SELECT count(*)
returnere kun et enkelt tal - antallet af rækker.
Derfor performer den sidste bedre. Det kan godt være at der ikke er den store effekt i lige dette tilfælde, men man bør nu alligevel lade være at lære sig dårlige vaner hvis det er det her fag man ønsker at fortsætte i. :^)
aaah! Det er jo smart :D Det har ikke den store effekt nej, men man bliver vel heller ikke overbombet med mysql-fejl hvis rækken ikke findes? (Hvis forespørgslen nu optræder flere steder)
Hvis rækken ikke findes returneres værdien 0. Hvis den findes netop en gang, så returneres selvfølgelig 1. Og ligeledes hvis rækken findes mere end en gang.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.