---
title: "Omvänd wild-card sökning"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/141914-omvänd-wild-card-sökning"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "nkrantz"
published: "2006-02-02T13:25:16.000Z"
updated: "2006-02-04T13:19:28.000Z"
replies: 10
views: 518
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/141914-omvänd-wild-card-sökning"
---

# Omvänd wild-card sökning

## #1 — nkrantz, 2006-02-02T13:25Z

Har en liten fråga. En kund skall ha ett rabattkodssystem där kunden skriver in olika koder för att få rabatter. Men nu har det även kommit fram att de även vill att vissa kunder skall kunna använda nummer från medlemskort, och inte köra en realtidscheckning av kortnummret, utan enbart gå på de 9 eller i vissa fall 6 första siffrorna på kortet. Vi admin-gränssnittet skall de alltså kunna lägga in wildcard kortnummer, typ 123456\*\*\*\*\*\*\*. 

Hur matchar jag via PHP/mySQL så att om användaren skriver in 123456123456 så ska den förstå att den skall validera mot 123456\*\*\*\*\*\*\*? 

Någon som har förslag? :)

// Nippe

Permalänk: https://www.webforum.nu/p/141914

## #2 — Matte, 2006-02-02T13:43Z

Använd LEFT()-funktionen i din SQL-fråga.

Permalänk: https://www.webforum.nu/p/1760030

## #3 — nkrantz, 2006-02-02T14:23Z

Mjo, men det kan ju vara olika antal tecken som jag ska jämföra.... I vissa fall så skall 12345678900000 godkännas mot 123456789\*\*\*\*\*, men i vissa fall skall 123456000000 godkännas mot 123456\*\*\*\*\*\*... typ...

// N

Permalänk: https://www.webforum.nu/p/1760037

## #4 — Matte, 2006-02-02T14:31Z

Om jag förstått dig rätt så är 123456\*\*\*\*\*\*\* ett värde som skickas in via formulär eller motsvarande.

Då borde det inte vara några problem att rensa bort \*\*\* från det postade. Sedan använda strlen() för att att ta fram längden, och bygga upp SQL-frågan.

Permalänk: https://www.webforum.nu/p/1760041

## #5 — nkrantz, 2006-02-02T14:59Z

Nope.. Du har inte förstått mig rätt. 123456\*\*\*\*\*\* sparas i databasen. 123456000000 skickas in från formuläret. Problemet är att antalet tecken innan "wildcardsen" kan variera... 

// Nippe

Permalänk: https://www.webforum.nu/p/1760050

## #6 — Matte, 2006-02-02T15:41Z

Du har krånglat till det för dig :)

Det borde gå att med LOCATE() och SUBSTRING() plocka ut siffrorna, för att sedan göra en jämförelse med LIKE.
Har du då "tal" både med och utan \* lär du troligtvis behöva använda IF() också.

Alternativt kan du loopa igenom alla rader och göra dina jämförelser med PHP, men detta är ingen höjdarvariant om du har många poster.

Permalänk: https://www.webforum.nu/p/1760071

## #7 — nkrantz, 2006-02-03T10:37Z

Hm... Jag tror nog att det enklaste är att göra allt omvänt liksom, plocka ut värderna från databasen och jämför med inputen, för att istället jämföra inputen mot databasen... Men som du säger, ingen höjdar variant direkt...

Tack ändå!

Permalänk: https://www.webforum.nu/p/1760436

## #8 — Matte, 2006-02-03T12:09Z

Testa annars något i stil med:

```php
$sql = "
  SELECT * FROM tabell 
  WHERE IF (LOCATE('*', knummer, 1), '$formvar' LIKE CONCAT(LEFT(knummer, LOCATE('*', knummer, 1)-1), '%'), '$formvar' = knummer)
";
```

Permalänk: https://www.webforum.nu/p/1760475

## #9 — nkrantz, 2006-02-04T12:39Z

Den funkar okej! MEN, jag skulle vilja att den blir känsligare när det gäller antal tecken.

Som det är nu så godkänner den (om knummer tex är 'code\*\*'):
Code
Code1
Code12
Code123
Code1234
(...)

Jag skulle vilja att den enbart godkände Code12 i ovanstående fall... Kan man få till det tror du?

// Nippe

Permalänk: https://www.webforum.nu/p/1760804

## #10 — Matte, 2006-02-04T13:12Z

Testa då med

```php
$sql = " 
  SELECT * FROM tabell 
  WHERE '$formvar' LIKE REPLACE(knummer, '*', '_') 
";
```

Permalänk: https://www.webforum.nu/p/1760820

## #11 — nkrantz, 2006-02-04T13:19Z

Du är kungen! :D

Tack så mycket!

Permalänk: https://www.webforum.nu/p/1760823

---

Tråden på webben: https://www.webforum.nu/amne/php/141914-omvänd-wild-card-sökning
