Just nu i M3-nätverket
Jump to content

Jämföra textsträngar


Nina75

Recommended Posts

Hej

 

Jag skulle vilja ha hjälp med en MySql-fråga

Jag har en filmdatabas och innan man lägger till en film så vill jag att det checkas av om filmen redan finns i databasen, på så sätt hålls databasen ren från dubbletter (det är iaf min tanke ;) )

 

Jag kör följande fråga:

$bool = "SELECT movieTitle FROM movies WHERE movieTitle LIKE BINARY ('". $title ."')";

Men det blir fel, eller egentligen så blir det ju rätt om $title är exakt skriven som den movieTitle som finns i databasen.

Dvs om $title är skriven som Robotar och movieTitle i databasen är skriven som robotar så blir det ingen matchning och Robotar läggs in i databsen fastän den inte borde göra det.

 

Jag vill ha s.k. case sensitive, Robotar ska vara samma som robotar. Hur får jag till det?

 

Jag har provat följande:

$bool = "SELECT movieTitle FROM movies WHERE movieTitle LIKE('". $title ."')";
$bool = "SELECT movieTitle FROM movies WHERE movieTitle ='". $title ."'";
$bool = "SELECT movieTitle FROM movies WHERE movieTitle REGEXP BINARY '". $title ."'";
$bool = "SELECT movieTitle FROM movies WHERE movieTitle LIKE BINARY '". $title ."'";

 

Så vilka alternativ finns det kvar?

 

(Frågan fungerar just nu om det står exakt lika, dvs Robotar i $title och Robotar i databasen)

 

[inlägget ändrat 2006-10-31 14:47:43 av Nina75]

Link to comment
Share on other sites

Jag vill ha s.k. case sensitive, Robotar ska vara samma som robotar. Hur får jag till det?
"Case sensitive" betyder skifteslägeskänslig, dvs att man skiljer på stora och små bokstäver, vilket väl är motsatsen till vad du är ute efter.

 

Normalt skiljer inte MySQL på stora och små bokstäver när det gäller strängar ( http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html ) det är bara när du explicit anger att du vill att strängarna ska behandlas som binära data som skifteslägeskänsligheten kommer in. Om det ändå inte funkar kan du ju alltid t ex göra om båda strängarna till bara små bokstäver innan du jämför dem.

 

Link to comment
Share on other sites

"Case sensitive" betyder skifteslägeskänslig, dvs att man skiljer på stora och små bokstäver, vilket väl är motsatsen till vad du är ute efter.

Ja självklart, var smått förvirrad där...

 

Men om nu MYSQL normalt inte skiljer på stora och små bokstäver hur kommer det sig då att den inte alls tycker att Robotar är samma som robotar?

Jag har inte angett i databasen heller att det ska vara binärt i den kolumnen och det fungerade inte med

$bool = "SELECT movieTitle FROM movies WHERE movieTitle LIKE('". $title ."')";

vilket det då borde ha gjort? (om jag nu fattat allt detta rätt)

 

Att göra om strängarna till små borkstäver är något jag helst vill slippa! Det måste finnas nåt annat sätt!

 

Tack ändå för ditt svar

 

Link to comment
Share on other sites

Att göra om strängarna till små borkstäver är något jag helst vill slippa!

Fast du behöver ju inte omvandla det permanent, bara i själva sökningen:

 

$bool = "SELECT movieTitle FROM movies WHERE LCASE(movieTitle) LIKE('". strtolower($title) ."')";

 

Link to comment
Share on other sites

Lite utanför ämnet men är det inte lite udda att använda LIKE som en funktion och inte som den operator det är? Eller finns det några fördelar med LIKE()-varianten?

 

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...