sql查询需要从另一个表输入

时间:2017-04-02 09:43:23

标签: php mysql

我有一个数据库,我想要两个表中的数据,它们看起来像这样:

http://[IPv6]

我想从categories: entries: +----+------+ +----+-------------+-------+-------------+ | id | name | | ID | category_id | title | description | +----+------+ +----+-------------+-------+-------------+ | 1 | foo | | 1 | 1 | bar | Loreum ip.. | +----+------+ +----+-------------+-------+-------------+ 获取信息,我的输入只是类别名称和条目标题。如果我使用两个语句,它确实有效。类似的东西:

entries

其中SELECT `id` FROM `categories` WHERE `name` = 'foo' LIMIT 1; SELECT `ID`, `category_id`, `title`, `description` FROM `entries` WHERE `title` = 'bar' AND `category_id` = $cat_id LIMIT 1; 是第一个条目的输出。但是我想将这些结合成一个声明,我在这里找不到有用的连接?所以我的问题基本上是如何将这些组合成一个查询?

3 个答案:

答案 0 :(得分:0)

您可以将两个表连接在一起并根据需要进行过滤。

select e.*
from entries e
join categories c on e.category_id = c.id
where e.title = 'bar'
    and c.name = 'foo'
order by ??  -- important when using "limit"
limit 1;

此外,要获得一致的行,您应该在查询中添加一个带有适当列的order by子句。如果你想要任何一行,那么你可以在没有它的情况下使用它。

要完全按照您的方式进行操作,您可以使用子查询:

select *
from entries
where category_id in (
        select id
        from categories
        where name = 'foo'
        limit 1
        )
    and title = 'bar'
    limit 1;

但请记住,如果没有order by子句,您可能会得到limit的不一致结果。

答案 1 :(得分:0)

你可以像我建议的那样使用连接概念

SELECT `ID`, `category_id`, `title`, `description` FROM `entries` 
inner join  `categories` on `entries`.`category_id`=`categories`.`id`
WHERE `categories`.`name` = 'foo' AND `title` = 'bar'  LIMIT 1;

看起来你看起来很新,请探索关于sql的概念

答案 2 :(得分:0)

可能是使用子查询的唯一方法。虽然我不认为这是一个好方法。

    SELECT `ID`, `category_id`, `title`, `description` FROM `entries` WHERE `title` = 'bar' 
AND `category_id` = (SELECT `id` FROM `categories` WHERE `name` = 'foo' LIMIT 1) LIMIT 1;