Avatar billede elskermad.dk Nybegynder
16. december 2008 - 14:54 Der er 11 kommentarer og
1 løsning

Omvendt brug af LIKE

Hej Eksperter!

Jeg har en problemstilling jeg ikke lige ved hvordan jeg konstruerer.
Jeg har en tilmeldingsformular, og har i den forbindelse oprettet en tabel over kombinationer man IKKE skal kunne oprette.

Jeg har denne tabel med blokkeringerne:

CREATE TABLE blokkering (
  id int(12) NOT NULL auto_increment,
  mail varchar(55) NOT NULL,
  brugernavn varchar(55) NOT NULL,
  navn varchar(55) NOT NULL,
  adresse varchar(55) NOT NULL,
  postnr varchar(55) NOT NULL,
  postby varchar(55) NOT NULL,
  land varchar(55) NOT NULL,
  tlf varchar(55) NOT NULL,
  mobil varchar(55) NOT NULL,
  PRIMARY KEY  (id)
);

INSERT INTO blokkering (id,mail,brugernavn,navn,adresse,postnr,postby,land,tlf,mobil) VALUES (null,'','','Hans*','','8?00','','','','');

Altså må ens navn fx ikke starte med Hans hvis man bor i postnumrene 8000, 8100, 8200, 8300, ..., 8900

Hvordan laver man sådan en sql-forespørgsel, hvor man får go/no-go for ens data?
Avatar billede arne_v Ekspert
16. december 2008 - 15:05 #1
Jeg tror at du bliver noedt til at lave en SELECT foerst og saa INSERT hvis ingen matches.

SELECT * FROM blokering WHERE ?navn LIKE navn AND ?postnr = postnr
if no records found then
  INSERT ...
end if
Avatar billede elskermad.dk Nybegynder
16. december 2008 - 15:11 #2
hej arne_v;

det var sådanset også det jeg havde tænkt mig (kan godt se jeg ikke har formuleret mig så godt!)
mysql skal blot returnere om der findes rækker i blokkeringstabellen som passer til det indtastede data, hvorefter jeg bagefter vil indsætte dataen.

problemet (som jeg ser det) er at man jo normalt kan skrive "navn LIKE '%?navn%'".
I mit tilfælde så ligger %'erne (endda i forkert format) i tabellen og ikke i selve sql-sætningen - kan LIKE stadig bruges så?

jeg har sgu lidt svært ved at formulere mit problem, håber du/nogen forstår hvad jeg mener :)
Avatar billede elskermad.dk Nybegynder
16. december 2008 - 15:23 #3
hvis jeg laver denne sætning: (postdata som php-variabler)

SELECT id FROM blokkering WHERE (brugernavn = '' OR brugernavn LIKE '$brugernavn') AND (mail = '' OR mail LIKE '$mail') AND (navn = '' OR navn LIKE '$navn') AND (adresse = '' OR adresse LIKE '$adresse1') AND (adresse = '' OR adresse LIKE '$adresse2') AND (postnr = '' OR postnr LIKE '$postnr') AND (postby = '' OR postby LIKE '$postby') AND (tlf = '' OR tlf LIKE '$tlf') AND (mobil = '' OR mobil LIKE '$mobil')

så virker det ikke, dog virker det hvis man indsætter en "tom" række, hvilket også er meget logisk, men skulle jo gerne kunne indsætte nogen begrænsninger
Avatar billede elskermad.dk Nybegynder
16. december 2008 - 15:23 #4
(jeg har rettet rækker i tabellen til at bruge % og _ i stedet for * og ?
Avatar billede arne_v Ekspert
16. december 2008 - 15:31 #5
Det er normalt felt LIKE konstant, men jeg mener godt at du kab bruge konstant LIKE felt.

* versus % kan fixes med en REPLACE i SQL.
Avatar billede arne_v Ekspert
16. december 2008 - 15:32 #6
Husk at vaere forberedt paa samtidigheds problemer.
Avatar billede elskermad.dk Nybegynder
16. december 2008 - 15:50 #7
Det virkede :D Der skulle bare byttes rundt på rækkefølgen af konstant og felt som du skrev. Hvordan virker replace?
Avatar billede elskermad.dk Nybegynder
16. december 2008 - 15:50 #8
og vil du uddybe samtidighedsproblemet?
Avatar billede elskermad.dk Nybegynder
16. december 2008 - 15:53 #9
fx REPLACE(REPLACE(brugernavn,'*','%'),'?','_') ?
Avatar billede arne_v Ekspert
16. december 2008 - 16:01 #10
Samtidigheds problemet opstaar hvis der aendres i din blokerings tabel mellem SELECT og INSERT.
Avatar billede elskermad.dk Nybegynder
16. december 2008 - 16:14 #11
okay det tror jeg ikke bliver et problem, smider du et svar? :)
Avatar billede arne_v Ekspert
16. december 2008 - 16:25 #12
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester