你好,我試圖找到與名稱#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);
你好,我試圖找到與名稱#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);
要回答這個問題,並作爲評價左(我自己)
使用'%#c3'
通過移除最後%
使用LIKE,%
通配符執行以下操作和幾個示例:
%XXX%
- 匹配任何XXX
%XXX
前後 - 匹配任何東西之前XXX
XXX%
- 匹配XXX
後什麼。
參考文獻:
另外,如果有任何用戶輸入,可以考慮使用一個事先準備好的聲明:
這將有助於防範潛在的SQL注入。
嗨你query
是錯誤的嘗試使用此
SELECT * from my_table WHERE FIND_IN_SET('#c3', hashtag);
FIND_IN_SET
返回string
的strings
列表中的位置,如果存在的話(如子字符串)。字符串列表本身是一個字符串,它包含由‘,’ (comma)
字符分隔的子字符串。
更多信息閱讀http://www.w3resource.com/mysql/string-functions/mysql-find_in_set-function.php
拆表到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。
看着你的桌子,我建議你打破你的桌子,以獲得多達許多鏈接的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';
什麼是每個匹配記錄的#標籤的價值。 –
問題在於你沒有提供足夠的信息;例如返回行的hashtag值....調試101.請注意'#c30'會匹配; '#c321'將匹配 –
您的查詢將匹配'hashtag'中具有'#c3'的所有行,'%'是通配符。 – segFault