2010-07-15 8 views
0

Salut im tente d'utiliser Sql dans les MySql pour trier certaines valeurs, ce qui est ce que j'ai:Sql construction Déclaration

Sélectionnez dans ma table les lignes où la valeur de l'état de colonne égale en ligne et la valeur dans les balises de colonne égale musée, les classer par nom et par ordre croissant.

SELECT * 
    FROM tech 
WHERE `STATUS` = 'online' 
    AND `TAGS` = 'museum' 
ORDER BY NAME ASC 

Cependant ce que je dois est ceci:

Sélectionnez dans ma table les lignes où la valeur de l'état de colonne égale en ligne et il y a cette valeur dans les balises de colonne égale musée, les trier par nom et dans l'ordre croissant. Ce que je veux dire, c'est que dans ma base de données, mes étiquettes de colonnes n'ont qu'une seule valeur par ligne, ce qui n'est pas très utile pour l'utiliser comme balise. Je veux le changer de sorte que la valeur de "musée" devienne "musée 3d programmation" et que SQL vérifie un "mot" particulier dans cette valeur de chaîne.

Cela peut-il être fait?

+0

Texte complet Recherche (FTS) est plus rapide et plus capable de rechercher/de faire correspondre le texte que ne le sera jamais. –

Répondre

4

Essayez

SELECT * 
    FROM tech 
WHERE `STATUS` = 'online' 
    AND `TAGS` like '%museum%' 
ORDER BY NAME ASC 
+0

Rigth sur place merci;) – Marvin

1

On dirait que vous voulez utiliser LIKE:

SELECT * 
    FROM tech 
    WHERE `STATUS` = 'online' 
     AND `TAGS` LIKE '%museum%' 
    ORDER BY NAME ASC 
+0

Merci c'est tout! – Marvin

+0

@Marvin assurez-vous de marquer cela comme la réponse si cela a fonctionné pour vous. – ahsteele

+0

Je ne peux que marquer une réponse correcte, je suis désolé, j'ai voté mais Jaime a répondu en premier. – Marvin

1

Il vous suffit d'utiliser LIKE et %. Voir this site.

donc quelque chose comme ça

..AND `TAGS` like '%museum%'... 
1

`Essayez ceci:

SELECT * 
    FROM Tech 
WHERE `STATUS` = 'online' 
    AND `TAGS` LIKE '%Museum%' 
ORDER BY Name ASC 
1

Plutôt que de créer des étiquettes multiples dans une seule colonne, vous devriez envisager de scinder les balises off dans une autre table. Ceci est connu comme database normalization. Cela rendra le travail avec vos données beaucoup plus facile, et évitera d'avoir à effectuer des recherches LIKE, ce qui peut être très lent.

J'ai répondu à une question très similaire il n'y a pas si longtemps, et j'ai inclus un exemple de structure de table, quelques données et quelques exemples de requêtes. L'exemple donné a trois tables: item, item_tag et tag. item contient, bien, des éléments, et tag contient des balises. item_tag est un junction table. Cela permet de créer une relation plusieurs-à-plusieurs entre les deux autres tables: chaque élément peut être associé à plusieurs balises, et chaque balise peut être associée à de nombreux éléments. La table de jonction se situe entre les deux, et contient une liste de paires élément-tag:

Will this (normalised) database structure permit me to search by tags as I intend?

Vous devriez aussi jeter un oeil à ce tutoriel MySQL:

An Introduction to Database Normalization

+0

Merci cela sonne quelque chose que je devrais vraiment étudier. J'ai entendu le terme jeté autour, mais je n'ai pas encore vraiment cherché. – Marvin