php - 为这些表选择查询

标签 php mysql sql select

我有两个表 items 和 item_details。

Table items

Table item_details

要在提要页面中显示项目,我使用以下 JOIN QUERY。

SELECT i.item_id,i.time,id.text,id.photo FROM items i LEFT JOIN item_details id ON i.item_id=id.item_id

但是,它会返回多行相同的项目 ID。我发现的唯一解决方法是首先只选择项目表,然后在 PHP 中循环时选择 item_detail 表。我觉得这不是最佳做法,可能会影响性能。

请建议一个更好的选择项目的方法。

最佳答案

问题:

您正在加入 item_details,其中有 3 条记录具有相同的 item_id。因此,结果包含该item_id 的更多记录。

解决方案:

我想这就是你想要的:

SELECT i.item_id,i.time,MAX(id.text) as text,MAX(id.photo) as photo
FROM items i LEFT JOIN 
     item_details id ON i.item_id=id.item_id
GROUP BY i.item_id,i.time

示例结果:

item_id time    text                            photo
---------------------------------------------------------------------
2       87213   (null)                          (null)
4       2029    another text row for item id 4  a photo for item id 4

SQL Fiddle 中的示例结果

注意:如果您有多个具有相同 item_idtext 值不同的记录,此方法将无法按预期工作照片列。

关于php - 为这些表选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31648428/

相关文章:

php - 检查数据库中创建的字符串,如果找到,则创建新字符串?

php - 使用 laravel mysql 将列的数据转换为多列(将列的数据转换为特定列)

php - SQL - 在特定时间(或 ID)后选择新值

php - 在半小时范围内显示小时数

php - 教义不进行更新

mysql - c 上的 const char 具有相同的变量但不同的值

php - 如何使用 PHP 准备好的语句插入 MySQL

mysql - MySQL 中的元表

sql - 来自 foreign_key 列的带有字符串前缀的递增序列

SQL方法用单个空格替换重复空格