2010-08-26 4 views
2

J'ai un document PHP qui va exécuter MySQL et le renvoyer en écho.MySQL LIKE générique pour la table

code:
$query1 = "SELECT * FROM feed, recipients WHERE feed.title LIKE \"%recipients.suburb%"\ ORDER BY pubDate DESC";

recipients.suburb (table.colonne) est dans mon MySQL DB. Comment puis-je effectuer des caractères génériques à ce sujet?

Cela fonctionne, mais je ne peux pas le faire aux tables?
$query1 = "SELECT * FROM feed, recipients WHERE feed.title LIKE '%test%' ORDER BY pubDate DESC";

Id aiment vérifier la colonne feed.title et voir si ce texte est en recipients.suburb. C'est pour un script qui finira par envoyer des emails aux utilisateurs, basé sur le texte de MySQL en relation avec l'emplacement de l'utilisateur.

Merci :)

+1

Que voulez-vous dire par * Cela fonctionne, mais je ne peut pas le faire aux tables? * – RedFilter

+0

Cela fonctionne pour les valeurs, mais pas pour les variables. Il n'y a pas de colonne "test", juste en l'utilisant comme une valeur. Il existe une colonne pour "suburb". Je veux l'utiliser. – Dean

Répondre

4

Essayez:

SELECT * 
FROM feed, recipients 
WHERE feed.title LIKE concat('%', recipients.suburb, '%') 
ORDER BY pubDate DESC 
+0

Super, merci. Fonctionne parfaitement. J'essaierai aussi la suggestion de js1568. – Dean

1

Vous seriez mieux avec une meilleure conception E-R où vous avez une table suburb avec un id. Vous pouvez ensuite avoir la clé étrangère suburb_id dans la table feed et la table recipients. Cela créerait une relation plusieurs-à-plusieurs entre feed et recipient que vous recherchez ici.

La solution consisterait alors à utiliser des jointures pour faire correspondre les destinataires à des flux où la banlieue est la même.

Voici ce que je propose:

CREATE TABLE IF NOT EXISTS `feed` (
    `feed_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `title` varchar(100) DEFAULT NULL, 
    `suburb` BIGINT(20) UNSIGNED NULL, 
    `pubDate` date DEFAULT NULL, 
    PRIMARY KEY (`feed_id`) 
    UNIQUE KEY `feed_id` (`feed_id`) 
); 

CREATE TABLE IF NOT EXISTS `recipients` (
    `recipient_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(100) NOT NULL, 
    `suburb` bigint(20) unsigned DEFAULT NULL, 
    PRIMARY KEY (`recipient_id`), 
    UNIQUE KEY `recipient_id` (`recipient_id`) 
); 

CREATE TABLE IF NOT EXISTS `suburb` (
    `suburb_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(100) NOT NULL, 
    PRIMARY KEY (`suburb_id`), 
    UNIQUE KEY `suburb_id` (`suburb_id`) 
); 

Et utiliser cette instruction SELECT:

SELECT feed.title, recipients.name, suburb.name 
FROM feed, recipients, suburb 
WHERE feed.suburb = suburb.suburb_id 
AND suburb.suburb_id = recipients.suburb 
AND feed.title LIKE CONCAT( '%', suburb.name, '%') 
ORDER BY pubDate DESC 
+0

Ok, je pourrais expérimenter avec ça. Jamais créé une clé étrangère. – Dean