2016-08-03 12 views
-1

TabellePHP MYSQLI Count Row Correct [delete this]

enter image description here

Hallo ich versuche, findet alle Hashtags mit dem Namen # c3 und mysqli Abfrage zeigen Sie mir: 3 Zeilen, aber richtig ist 2 Zeilen mit # c3 ??? Wo ist das Problem? Ich möchte mir 2Rows zeigen!

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

Was auf jeden passenden Datensatz der Wert für den Hashtag ist. –

+0

Das Problem liegt darin, dass Sie nicht genügend Informationen bereitstellen; wie die Hashtag-Werte der Zeilen, die zurückgegeben wurden .... Debugging 101. Beachten Sie, dass '# c30' übereinstimmen würde; '# c321' würde passen –

+0

Ihre Abfrage würde zu allen Zeilen passen, die' # c3' in 'hashtag' haben, die'% 'sind Platzhalterzeichen. – segFault

Antwort

4

Um dies zu beantworten, und wie in den Kommentaren (von mir) links

Verwenden '%#c3' durch die letzte %

Entfernen

Mit LIKE, der % Wildcard tut das folgende und ein paar Beispiele:

%XXX% - Spiele etwas vor und nach XXX

%XXX - alles Spiele vor XXX

XXX% - alles nach XXX Spiele.

Referenzen:

Plus sollte jeder Benutzer eingegeben werden, sollten Sie eine vorbereitete Anweisung:

Es wird gegen eine mögliche SQL-Injektion helfen.

0

Hallo Ihr query ist falsch versuchen, dies zu verwenden

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

FIND_IN_SET die Position eines string zurückgibt, wenn es vorhanden ist (als Teil) innerhalb einer Liste von strings. Die String-Liste selbst ist eine Zeichenfolge, die durch ‘,’ (comma) Zeichen getrennte Teilstrings enthält.

für weitere Informationen lesen http://www.w3resource.com/mysql/string-functions/mysql-find_in_set-function.php

0

Sie können FIND_IN_SET

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

docs Siehe here und Beispiel here

0

Split die Tabelle in zwei Tabellen:

post: id | text | date 
     1 
     2 
     3 

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

dann Ihre Abfrage wird:

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

Der Akt der Tabelle Normalisierungs genannt spaltet, und Sie müssen dies tun, weil Sie Ihre Tabellen in keiner Normalform sind, die sie nicht relationale macht, die den Zweck besiegt sie der Speicherung in einer relationalen Datenbank. Überprüfen Sie https://en.wikipedia.org/wiki/First_normal_form für weitere Informationen.

0

Mit Blick auf Ihren Tisch würde ich vorschlagen, dass Sie Ihre Tabellen aufteilen, um einen Link für viele Hashtags zu haben. Auf diese Weise können Sie nach allen Datensätzen suchen, die einen passenden Hashtag haben.

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

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

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

Dies würde dann können Sie eine SQL-Anweisung verwenden, wie:

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