PHP Değişken SQL alanında bulunan olup olmadığını kontrol edin

4 Cevap php

Mümkün takip ediyor?

DB alan içerir: 1,2,3,4

$a=1;

$selqry="select * from table where field={contains $a}";

Thanks, B.

4 Cevap

MySQL FIND_IN_SET(str,strlist) function orada size yardımcı olabilir (edit: oops .... durumda MySQL kullanıyorsanız)

Returns a value in the range of 1 to N if the string str is in the string list strlist consisting of N substrings. A string list is a string composed of substrings separated by “,” characters.
SELECT
  x,y,z
FROM
  tablename
WHERE
  FIND_IN_SET(':id', field)

(: $ A değeri ile id ama kodlanmış emin / doğru kaçtı yapmak size kullanarak değilseniz pdo/prepared statements, değiştirin)

Gerçi mükemmel index-dostu değil ... senin NEREDE-yan tümcesinde bu işleve sahip olan bir tam tablo taraması ile bitireceğiz.

Tabii, bu mümkün.

  1. Sakıncası yoksa "1" uyan "2,3,11,4". Sen INSTR veya LIKE kullanarak bunu yapabilirsiniz. Örnek:

    SELECT *
    FROM tbl
    WHERE INSTR(field, '1') != 0
    
  2. Eğer istemiyorsanız "1" sizin VTYS (MySQL, örneğin, yapar) destekliyorsa regex "2,3,11,4", bir (yavaş) kullanmak gerekecek maç:

    SELECT *
    FROM tbl
    WHERE field REGEXP '[[:<:]]1[[:>:]]'
    

Ancak, daha iyi bir soru bu iyi bir fikir olup olmadığıdır. Ve buna cevabı kocaman bir no. Tek bir alanda birden fazla değer saklamanıza olmamalıdır. Böyle bir durum gerçekten normalization yararlanacak.

Ben soruyorsun% 100 emin değilim ama neden sadece bir LIKE, çok sayısal alanlar üzerinde çalışması gerekir yapmak değil:

SELECT * FROM foo WHERE id like '%1%';

Bu 001, 100 neticesinde, ve 101 doyurmaya, 010, vs

Alan yalnızca 1-8 numara içeriyorsa basit yapabilirsiniz

$selqry="select * from table where field like '%" . intval($a) . "%'";

Muhtemelen başka bir masaya alana taşımak ve kimliği dayalı tabloları birleştiren bir sorgu kullanmak "olmalıdır."