3

我有 2 个表,一个称为items,另一个称为sliders

我想调用sliders.item_id = items.id的所有列,并且两者都已发布,因此items.published=1sliders.published=1。但我也想调用 为 NULL 的sliders.item_id

所以基本上就像一个右连接,我得到所有与约束匹配的相关记录,还有滑块表上不对应于项目表的记录。

简而言之,重点是:我想获得属于项目的所有滑块 (sliders.item_id=items.id) 和 (sliders.published=1 AND items.published=1) 但还有 item_id=null 的滑块。

我做了一个有效的查询,但它并不满足我。

select *
from items
right join sliders
on items.id = 27
and items.id = sliders.item_id
and items.published = 1
where sliders.published = 1

桌子

CREATE TABLE IF NOT EXISTS `items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(30) NOT NULL,
  `item_description` text NOT NULL,
  `published` int(11) NOT NULL,
  PRIMARY KEY (`id`)
)

CREATE TABLE IF NOT EXISTS `sliders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pic_path` text NOT NULL,
  `item_id` int(11) DEFAULT NULL,
  `published` int(11) NOT NULL,
  PRIMARY KEY (`id`)
)

首先我想在基本的 MySQL 查询中使用它,因为我可以稍后在 cakephp 中转换。

4

2 回答 2

1

当您从表中获得所有记录时,这些记录都是从两者发布的:

$SQL = "SELECT * FROM items RIGHT JOIN sliders ON items.id=sliders.id WHERE items.published=1 AND sliders.published=1";

当你想获得特定的 id 记录时.. $id=27

$QRY = "SELECT * FROM items RIGHT JOIN sliders ON items.id=sliders.id WHERE items.published=1 AND sliders.published=1 AND items.id= $id";

如果您想获得多于一个 id 记录,那么... $ids="27,28,29,30,50,55";

$QRY = "SELECT * FROM items RIGHT JOIN sliders ON items.id=sliders.id WHERE items.published=1 AND sliders.published=1 AND items.id in($ids)";

在最后一个查询中,您从上面的 table 和 id 中获取发布的记录。

于 2014-05-23T10:31:43.460 回答
1

试试这个查询,

SELECT *
FROM items 
RIGHT JOIN sliders
ON items.id = sliders.item_id
WHERE items.published = 1 AND sliders.published = 1
于 2014-05-23T08:58:24.640 回答