2016-03-23 30 views
-1

birden tagsid arasından seçim SQL:örneğin, aynı satırda

tagsid = 1 
recipeid = 2|12|1|8 

Bu kodu kullanırsanız:

$query = "SELECT * FROM recipe where tagsid like '%".$tag_id."%'"; 

o gösterecektir 1, tagsid12, 1, ancak yalnızca tagsid 1 olmalıdır. Bu neden yanlış?

+2

Bu durumun kolayca işlenmesi için veritabanınızın normalleştirilmesi gerekiyor. Bir sorunla karşılaşmanızın sebebi, '' '' '12''de ve' LIKE' kullanıyorsunuz, bu sadece herhangi bir dize arıyor. "% |" Gibi bir şeyleri deneyebilirsiniz. $ Tag_id. "|% '" ', Ancak başka sorunları var. –

+1

Kendinize bir iyilik yapın ve veri şemanızı normalleştirin ^^ – moonwave99

+0

Sorguyu düzenlemeden sonra belirsiz hale getirdiğini düşünüyorum. Sorunuzda 'tagid' varken' recipeid' nedir? ' –

cevap

0

önce veya sınırlayıcısıyla önce, virgül ile boruların değiştirdikten sonra tagsid sütun üzerinde ama hiçbir şey

$query = "SELECT * FROM recipe WHERE tagsid LIKE '%|".$tag_id."|%' OR tagsid LIKE '".$tag_id."|%' OR tagsid LIKE '%|".$tag_id."'"; 
+0

Yardımlarınız için teşekkürler ...^_^ – OsamahM

+0

no problem - gad yardımcı oldu –

0

Sen değeri ardına | ile bu tag_id başlar tag_id ya | arasında ya da eğer bir oluşum için bulmalıdır. Ben her zaman tag_id sonra | var düşünüyorum.

$query = 
    "SELECT * 
    FROM recipe 
    where tagsid like '%|".$tag_id."|%'" or 
      tagsid like '".$tag_id."|%'"; 

iki vaka dikkate alınmalıdır:

%|<tag_id>|% - ilk etapta üzerinde

o tagsid 12, 1 recipeid 1 gösterecektir - değil ilk etapta

<tag_id>|% üzerinde Ancak bu sadece tagid 1'de olmalı. Neden bu yanlış?

% sembol %1% model için herhangi symbols.You arama herhangi bir sayıda anlam joker olarak çalışıyor çünkü. En az bir 1 alt dizgisi olan tüm dizeler, desenle eşleşir. 12| da. sonra sınırlayıcı, ama hiçbir şey sınırlayıcı ile

0

sonra kullanın FIND_IN_SET().

$query = "SELECT * 
      FROM recipe 
      WHERE COALESCE(FIND_IN_SET($tag_id, REPLACE(tagsid, '|', ',')), 0) > 0" 

Bu arada, çalışmak zor olduğu için CSV'yi bir sütunda saklamaktan kaçınmalısınız.

İlgili konular