0

我不太确定如何做到这一点——我对 MySQL 中的连接了解有限,从我读到的内容来看,我认为它们在这里用处不大。

本质上,我有 2 张桌子:

images                          votes
---------------------------     ------------------------------
image_id | name | square_id     vote_id | image_id | vote_type 
---------------------------     ------------------------------
1          img1   14            1         4          1
2          img2   3             2         17         0
3          img7   72            3         2          1
...                             ...
n          imgn   1478          n         n          1

我想做的是获取每个图像的详细信息以及在特定条件为真(例如每个图像具有特定 )的每个图像上投的票数(加上vote_typesquare_id。执行此查询的第一部分很容易:

SELECT `image_id`, `name` FROM `images` WHERE `square_id` = :boundParameter;

但是,我不确定如何获取满足查询中原始 WHERE 条件的每个图像vote_idvote_type

我将如何做到这一点?

4

3 回答 3

4

这实际上是表之间的一个非常简单的连接。你真的真的应该阅读我整理的关于 SQL 以及两个表之间的查询和连接的问答。

与此同时,这可能会给你你想要的:

select
    img.image_id,
    img.name,
    img.square_id,
    count(vot.vote_id) as numberVotes,
    vot.vote_type
from
    images img
        join votes vot
            on img.image_id=vot.image_id
group by
    img.image_id,
    img.name,
    img.square_id,
    vot.vote_type

所以,首先,你不想要多个查询,你想在这里使用一个查询。对数据库运行多个连接/查询的开销比运行一个获取所需所有数据的查询要高得多。

于 2013-08-30T10:19:36.307 回答
0

试试这样:

SELECT images.image_id, images.name , votes.vote_id , votes.vote_type 
FROM images
LEFT JOIN votes ON images.image_id = votes.image_id
WHERE `square_id` = :boundParameter;
于 2013-08-30T10:20:58.597 回答
0
SELECT images.image_id,
       images.name,
       votes.vote_id,
       votes.vote_type
FROM images
LEFT JOIN votes ON images.image_id = votes.image_id
WHERE images.square_id = :boundParameter;
于 2013-08-30T10:21:34.050 回答