Frage

Kann jemand geben Sie mir eine Abfrage, die als Ergebniszeilen ID 1 & 3 zurück?

ID Name Hidden 
1 Mika 1,4,2 
2 Loca 0 
3 Nosta 4 
4 Like 2 

So etwas SELECT * FROM Tabelle WHERE Versteckt (4)

War es hilfreich?

Lösung

SELECT * FROM table WHERE FIND_IN_SET('4',Hidden);

docs für FIND_IN_SET

Andere Tipps

SELECT * FROM table WHERE CONCAT(',',Hidden,',') LIKE '%,4,%'

oder Sie können mit LIKE wie diese

vermeiden

SELECT * FROM table WHERE INSTR(CONCAT(',',Hidden,','), ',4,') > 0

das wird nicht die Dinge wie 40, 14, usw., aber Sie müssen sicherstellen, gibt es keine Räume im versteckten Feld (zB 1, 4, 5 oder aktualisieren Sie die concat und LIKE Funktion entsprechend.

SELECT * FROM table WHERE Hidden LIKE '%4%'

sind die Platzhalter%.

Volltextsuche könnte ein sinnvoll sein, für diese Lösung, solange Sie das richtige Wort bricht verwenden.

So oder geht mit Volltextsuche, wie vorgeschlagen, oder

Drehen Sie die Verborgen Werte aus in eine separate Tabelle, mit der ID der aktuellen Zeile.

Zum Beispiel würde Mika hat drei Einträge in dieser Tabelle

ID = 1, Ausgeblendet = 1
ID = 1, Versteckt = 4
ID = 1, Ausgeblendet = 2

Dann könnte man Ergebnisse gegen diese Spin-off-Tabelle zurück.

Sie können auch zu prüfen, um die Tabelle zu normalisieren und diese „versteckten“ Werte in einer separaten Tabelle auf der apropriate Spalte mit einem Index zu speichern. In Abhängigkeit von der Anzahl der Zeilen, die Sie, dass habe viel schneller sein:

ID Hidden
1  1
1  4
1  2 
3  4 
4  2 

und

SELECT DISTINCT table.* FROM table, hidden_table WHERE table.ID = hidden_table.ID AND hidden_table.hidden = 4
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top