2016-08-03 27 views
-1

PHP的mysqli計算行正確的[刪除]

enter image description here

你好,我試圖找到與名稱#C3和mysqli的查詢中的所有井號標籤告訴我:3行,但正確的是2行以# c3問題在哪裏?我想告訴我2Rows!

$sql_query = mysqli_query($Connection, "SELECT * FROM my_table WHERE hashtag LIKE '%#c3%'"); 
echo mysqli_num_rows($sql_query); 
+0

什麼是每個匹配記錄的#標籤的價值。 –

+0

問題在於你沒有提供足夠的信息;例如返回行的hashtag值....調試101.請注意'#c30'會匹配; '#c321'將匹配 –

+0

您的查詢將匹配'hashtag'中具有'#c3'的所有行,'%'是通配符。 – segFault

回答

4

要回答這個問題,並作爲評價左(我自己)

使用'%#c3'通過移除最後%

使用LIKE,%通配符執行以下操作和幾個示例:

%XXX% - 匹配任何XXX

%XXX前後 - 匹配任何東西之前XXX

XXX% - 匹配XXX後什麼。

參考文獻:

另外,如果有任何用戶輸入,可以考慮使用一個事先準備好的聲明:

這將有助於防範潛在的SQL注入。

0

您可以使用FIND_IN_SET

SELECT * FROM my_table WHERE FIND_IN_SET('#c3',hashtag)

見文檔here和示例here

0

拆表到2個表:

post: id | text | date 
     1 
     2 
     3 

post_hashtag: post_id | hashtag 
       1   #c1 
       1   #c3 
       2   #c3 
       3   #c3blabla 

然後將查詢變爲:

SELECT post.*,post_hashtag.hashtag FROM post JOIN post_hashtag ON post.id=post_hashtag.post_id WHERE hashtag='#c3#'; 

拆分表的行爲被稱爲正火,你需要做到這一點,因爲你的表是不是在任何正常的形式,這使得它們不是關係這違背了它們存儲的目的在關係數據庫中。有關更多信息,請參閱https://en.wikipedia.org/wiki/First_normal_form

0

看着你的桌子,我建議你打破你的桌子,以獲得多達許多鏈接的hashtag。通過這種方式,您可以搜索具有匹配哈希標籤的所有記錄。

data table 
+----+------+------+ 
| id | text | date | 
+----+------+------+ 

hash table 
+----+------+ 
| id | hash | 
+----+------+ 

link table 
+---------+---------+ 
| data_id | hash_id | 
+---------+---------+ 

這則允許你使用SQL語句,如:

SELECT * FROM data 
INNER JOIN link ON data_id = data.id 
INNER JOIN hash ON hash_id = hash.id 
WHERE hash = '#3';