查询与不同表关联的值的类似结果(LIKE%..%)

时间:2017-10-06 16:28:21

标签: php mysql

我在MySQL中有三个表格: @ContextConfiguration("classpath:META-INF/spring/rabbitmq-producer.xml"){u'probabilities': {u'positive': 0.214111, u'neutral': 0.66828, u'negative': 0.11761}, u'usage': u'By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions', u'sentiment': u'neutral'} items(允许'多对多'关系)。

category

intermediate

TABLE category:            TABLE items:

id_category   theme        id_items       part
1             dog          1              tomato
2             fruit        2              rottweiler
3             bird         3              blackbird
4             veg          4              apple

每个表intermediateid_intermediate id_category id_items 1 1 2 2 2 4 3 3 3 4 4 1 中有数千个条目,但仅有'数以百计的关系'表 - category

现在,我要做的是查询某个,一个变量使用items来检查类似的结果(拼写单词),但仅限于COLUMN {{1在表intermediate中,表LIKE '%$var'中存在关联或存在关联。 我知道如何在TABLE part上进行查询(使用PHP):

items

但正如我所提到的,我只需要那些与另一个TABLE intermediate有关联的那些。

我尝试了很多东西,包括一个嵌套查询,如:

items

但是我收到了这个错误:"查询无效:每个派生表都必须有自己的别名",我真的不明白。

无论如何,这里有人知道如何解决我的问题吗?

我在这个论坛上找不到这样的问题。

更新(解决方案): scaisEdge提供了解决方案。

$query = "SELECT * FROM items WHERE part LIKE '%$var%' LIMIT 10";

我认为这不是重复,因为其他提案引用了ALIAS错误,这是我的错误尝试的一部分。但即使解决了别名错误,它也必须采用不同的方法。

2 个答案:

答案 0 :(得分:1)

对于特定类别(例如:dog),您可以在3个表上使用连接 对于过滤器,您可以使用cooncat来构建像字符串

这样的权限
$query = 
       SELECT items.part, items.id_items, inter.id_intermediate, inter.id_items 
        FROM items 
        JOIN intermediate inter on inter.id_items
        JOIN category on inter.id_category = category.id and category.name = 'dog'  
        WHERE  items.part LIKE concat ('%', '$var' , '%') ";

对于所有类别,您可以避免第3次加入

$query = "
       SELECT items.part, items.id_items, inter.id_intermediate, inter.id_items 
        FROM items 
        JOIN intermediate inter on inter.id_items

        WHERE  items.part LIKE concat ('%', '$var' , '%') ";

答案 1 :(得分:0)

$query = "SELECT i.* FROM 
(SELECT items.part, items.id_items, id_intermediate, id_items 
FROM items JOIN intermediate 
WHERE inter.id_items IS NOT NULL) as i
WHERE i.items.part LIKE '%$var%'";

这应该可以解决您的问题。 “as i”是别名