Avatar billede Hans1 Praktikant
13. oktober 2012 - 19:47 Der er 19 kommentarer

Hjælp til tilføjning af wildcards

Hej

Hvordan tilføjer jeg wildcards (%) på `specifications`.`sn` ?

SELECT `products2`.`type`, `products2`.`sn`, `products2`.`lap`, `specifications`.`year`
from `products2`
INNER JOIN `specifications` ON `products2`.`sn` LIKE `specifications`.`sn`
WHERE `products2`.`id` = ? LIMIT 1
Avatar billede arne_v Ekspert
14. oktober 2012 - 00:53 #1
ON `products2`.`sn` LIKE CONCAT(`specifications`.`sn`,'%')

vil jeg tro
Avatar billede arne_v Ekspert
14. oktober 2012 - 00:53 #2
Og hvis du fjerner alle de overfloedige backticks saa bliver det nemmere at se single quotes.
Avatar billede Hans1 Praktikant
14. oktober 2012 - 10:05 #3
Jeg har prøvet at tilføje dette til min kode men jeg får følgende fejl:

Warning: Division by zero in ... on line 43
Der opstod en fejl i erklæringen: Query was empty

Findes der andre måder hvor på man kan sammenligne (like) to kolonner i to forskellige tabeller?

Jeg troede at disse backticks var vigtige og havde noget med SQL-injection at gøre.
Jeg gjorde det fordi olebole gør det i denne guide: [url]http://www.eksperten.dk/guide/1480[/url]
Avatar billede arne_v Ekspert
14. oktober 2012 - 14:21 #4
Kan du poste din SQL som den ser ud nu?
Avatar billede arne_v Ekspert
14. oktober 2012 - 14:22 #5
Backticks beskytter ikke mod SQL injection.

De goer at man kan bruge reserverede ord i tabel/felt navne og have tabel/felt navne med mellemrum i.

Begge dele er aldeles gyselige, saa man boer aldrig have grund til at bruge backticks og derfor boer man efter min mening undlade dem.
Avatar billede Hans1 Praktikant
14. oktober 2012 - 14:35 #6
SELECT products2.type, products2.sn, products2.lap, specifications.year
FROM products2
INNER JOIN specifications ON products2.sn LIKE CONCAT('%', specifications.sn, '%')
WHERE products2.id = ? LIMIT 1
Avatar billede arne_v Ekspert
14. oktober 2012 - 15:17 #7
Proev og udskriv en fejl kode naar query udfoeres hvis den fejler.
Avatar billede Hans1 Praktikant
14. oktober 2012 - 15:37 #8
Hvordan gør jeg det?
Avatar billede arne_v Ekspert
14. oktober 2012 - 15:55 #9
Hvis gammeldgas mysql extension:

$res = mysql_query("SELECT ...) or die(mysql_error());
Avatar billede Hans1 Praktikant
14. oktober 2012 - 16:19 #10
Jeg bruger prepared statement under MySQLI

Jeg bruger allerede: $mysqli->error;
Den giver mig fejlen som skrevet i #3
Avatar billede Hans1 Praktikant
14. oktober 2012 - 16:20 #11
Kan du bruge min tabel struktur til noget?
Avatar billede arne_v Ekspert
14. oktober 2012 - 17:41 #12
Fejlen i #3 lyder ikke som fejl fra query men fra noget senere
Avatar billede Hans1 Praktikant
14. oktober 2012 - 18:05 #13
Jeg får samme fejl hvis jeg prøver uden INNER JOIN:

SELECT products2.type, products2.sn, products2.lap, specifications.year
FROM products2, specifications
WHERE products2.id = ? AND products2.sn LIKE '%' + specifications.sn + '%' LIMIT 1

Jeg tror at den tror at den skal dividere npr jeg bruger procenttegn.
Avatar billede arne_v Ekspert
15. oktober 2012 - 21:03 #14
SQL med CONCAT er korrekt.

Bruger du PHP '' streng og det giver problemer med ' ?
Avatar billede Hans1 Praktikant
15. oktober 2012 - 21:45 #15
Nu virker det hvis jeg skriver med backslashes.
LIKE CONCAT(\'%\', specifications.sn, \'%\')

Men jeg får uønskede rækker.
Avatar billede arne_v Ekspert
15. oktober 2012 - 21:55 #16
du faar vel de raekker som du skal med din SQL

hvis du vil have faerre raekker maa du justere din SQL
Avatar billede Hans1 Praktikant
15. oktober 2012 - 22:09 #17
Jeg joiner muligvis forkert.
Jeg får flere identiske rækker hvor en eller to kolonner er ens.
Avatar billede arne_v Ekspert
17. oktober 2012 - 16:55 #18
Kan du vise din SQL som den ser ud nu og et eksempel paa for mange raekker?
Avatar billede Hans1 Praktikant
18. oktober 2012 - 16:08 #19
Jeg har muligvis løst problemet med brug af GROUP BY funktionen
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

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