Php 当数据库中只有一个条目时,SQL查询返回重复项

Php 当数据库中只有一个条目时,SQL查询返回重复项,php,mysql,sql,Php,Mysql,Sql,我正在试验一个测试数据库来学习SQL(MySQLi-PHP) 我从两个表add_images和item中提取数据,其中“item”的主键被引用为“add_images”中的外键。一个“项目”将只有一个图像(添加图像) 我需要得到一个项目的图像名称引用的具体细节 在d7.jpg下的数据库中,我只有一个VARCHAR类型的条目。当我运行下面的查询时,我得到了34个结果,而我应该只得到一个?为什么会这样 在phpmyadmin中运行查询时也会发生这种情况 这是一个问题 SELECT item_name

我正在试验一个测试数据库来学习SQL(MySQLi-PHP)

我从两个表add_images和item中提取数据,其中“item”的主键被引用为“add_images”中的外键。一个“项目”将只有一个图像(添加图像)

我需要得到一个项目的图像名称引用的具体细节

在d7.jpg下的数据库中,我只有一个VARCHAR类型的条目。当我运行下面的查询时,我得到了34个结果,而我应该只得到一个?为什么会这样

在phpmyadmin中运行查询时也会发生这种情况

这是一个问题

SELECT item_name, catagory, brand, store, location, month, year, details FROM add_images, item WHERE add_images.image_name='d7.jpg '
我想我在这里做了一些根本错误的事情,我的桌子配置方式

希望有人能提出建议

谢谢

下面是两张表

CREATE TABLE IF NOT EXISTS `add_images`( `image_id` int(10) unsigned NOT NULL     AUTO_INCREMENT COMMENT 'unique id for an image',
  `item_id` int(10) unsigned NOT NULL COMMENT 'unique id for the item been added',
  `image_name` varchar(20) NOT NULL COMMENT 'name of the image',
  `type` enum('standard','deleted','profile','look','item') NOT NULL COMMENT 'status and       type of image',
  `date_added` varchar(50) NOT NULL COMMENT 'date image was added',
  PRIMARY KEY (`image_id`),
  UNIQUE KEY `item_id` (`item_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='Add images to item or profile picture'     AUTO_INCREMENT=50 ;


CREATE TABLE IF NOT EXISTS `item` (
 `item_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key for item',
 `item_name` varchar(20) NOT NULL COMMENT 'title name of the item',
 `catagory` enum('accessories','jackets','coats','footwear','legwear','jeanswear','dresses','shirts','tops','t-shirts','knitwear','skirts','shorts') NOT NULL COMMENT 'item catagory',
 `brand` varchar(20) NOT NULL COMMENT 'brand of product',
 `store` varchar(20) NOT NULL COMMENT 'store the item was purchased',
 `location` varchar(20) NOT NULL COMMENT 'location the item was purchased',
 `month` enum('January','February','March','April','May','June','July','August','September','October','November','December') NOT NULL COMMENT 'month the item was purchased',
 `year` int(2) NOT NULL COMMENT 'year the item was purchased',
 `details` varchar(500) NOT NULL COMMENT 'details about the item description',
 `date` varchar(50) NOT NULL COMMENT 'date item created',
 PRIMARY KEY (`item_id`),
 UNIQUE KEY `item_id` (`item_id`)
)    ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='holds data about the item'     AUTO_INCREMENT=72 ;

这是因为您正在执行连接(隐式地使用FROM中的2个表),而没有指定它们之间的链接

好的语法应该是:

SELECT item_name, catagory, brand, store, location, month, year, details FROM add_images, item WHERE add_images.image_name='d7.jpg ' AND add_images.item_id=item.item_id

您的查询执行联接,但未在
表的WHERE子句中添加任何条件,因此无论项id是否匹配,查询都会将所有
项与添加图像结果合并。您需要更改查询以反映这一点

SELECT item_name, catagory, brand, store, location, month, year, details 
FROM add_images, item 
WHERE add_images.image_name='d7.jpg '
  AND item.item_id = add_images.item_id;
编辑:如果将查询重写为显式联接,则更容易看到表之间是否缺少链接

SELECT item_name, catagory, brand, store, location, month, year, details 
FROM add_images
JOIN item ON item.item_id = add_images.item_id   -- ON specifies the link
WHERE add_images.image_name='d7.jpg ';

您需要一个联接条件:

SELECT item_name, catagory, brand, store, location, month, year, details 
FROM add_images, item 
WHERE add_images.item_id = item.item_id and add_images.image_name='d7.jpg '
-使用SQL-89语法,或:

SELECT item_name, catagory, brand, store, location, month, year, details 
FROM add_images
JOIN item ON add_images.item_id = item.item_id 
WHERE add_images.image_name='d7.jpg '

-使用SQL-92语法。

根本错误的部分是您没有在查询中指定两个表之间的关系。您只筛选其中一个表,但从另一个表检索所有行。DDL为+1000。(唉,只有+1是可能的。)哦,我明白了,快到了!谢谢约阿希姆的解释!也谢谢马克的解释!也谢谢你的解释!