VARCHAR alanında bir dizi için MySQL arama

5 Cevap php

Ben virgül bu değerler sayılar ayrılmış değerler içeren benim veritabanında bir alan var, ve ben bir arama yapmak ve bir dizi kolon boyunca bu sütunda görüntülenen sayısını saymak için çalışıyorum

$sql = "SELECT sector_id_csv, COUNT(sector_id_csv) as count FROM cv WHERE sector_id_csv LIKE '$sectorId'";

Bu yavaş görünüyor ve herhangi bir sonuç vermez ve bunu arama tablosunda mevcut olduğunu sector_id biliyorum.

5 Cevap

Eğer % joker kullanmak, temelde, bu güzel çalışması gerekir:

WHERE sector_id_csv LIKE '%$sectorId%'";

Bu senaryoda sorunlara neden eğilimi ne olsa da, gerçek olduğunu 50 de bulmak 501 502 503 edecek için bir arama vb.

Bir sondaki olması için virgülle ayrılmış liste güvenebilirsiniz eğer arkasında every giriş, bu aramak için daha güvenilir olacaktır Virgül

50,

bu değeri sadece yakalamak için.

WHERE CONCAT(',', sectveya_id_csv, ',') LIKE '%,$sectveyaId,%'

veya

WHERE FIND_IN_SET('$sectveyaId', sectveya_id_csv);

This will ensure that your query returns only rows with sectveya id in given field. Provided that sectveya id-s in this field are comma separated.

Any query using LIKE veya FIND_IN_SET will be slow as it cannot take advantage of indexes. Please consider putting all sectveya id-s in separate table.

Also fveya security reasons please remember to ensure that $sectveyaId is a number by casting it to int like that:

$sectveyaId = (int)$sectveyaId;

befveyae using it in a query.

GİBİ çalışması için size ped % joker değerini gerekmez mi?

$sql = "SELECT sector_id_csv, COUNT(sector_id_csv) as count FROM cv WHERE sector_id_csv LIKE '%".$sectorId."%'";

En azından bu makaleyi okuyarak benim anlayış, joker kullanımınız istediğiniz durumuna bağlıdır.

... Ama scema normalize edilmiş ise bu çemberin içinden atlamak gerek olmazdı - ve a lot daha hızlı çalışır.

C.

Aslında sayı o da, başından sonuna ya da olabilir. Yani yapmanız gereken

WHERE sector_id_csv='$sectorId' OR sector_id_csv LIKE '%,$sectorId' OR sector_id_csv LIKE '$sectorId,%' OR sector_id_csv LIKE '%,$sectorId,%'