【问题标题】:Selecting id against each field in a table针对表中的每个字段选择 id
【发布时间】:2014-04-07 07:12:06
【问题描述】:

我有一个 ID 列表为 (1,2,3...)

我称之为 $category_ids。现在在同一张表中有一个 super_parent_category 字段,表示该类别在列表中的最高标签。

现在我想检索每个类别 ID 的超级父 ID。

SELECT es_super_parent,es_id 
       FROM ephpb2b_categories 
       WHERE es_id IN ({$category_ids})");

上面的查询只返回了 4 条记录,因为 $category_ids 中的所有 id 都属于这 4 个类别。

但我想要 $category_ids 中所有 50 条记录的结果。

所以如果我提供 1、2、4、5、6、6、76, 我应该返回 1,3,4,5,6,66,2,

谢谢

【问题讨论】:

  • 问题是它只返回每个父类别一次..所以如果 (3,4,5) 中有 id 并且它们属于一个 parent_category 即 7. 所以它返回 7只有1次
  • 我不完全明白你的意思。 $category_ids 是否来自(子)查询?如果是这样,你可以发布它吗?以及两个表的模式。
  • 它是一个表。实际上它是一个类别表。主键是 es_id,在同一个表中有一个列 parent_cateogry_id。现在它是一个包含类别和子类别的表。 super_parent_id不等于0的类别是子类别
  • @user3445065 - 请看我的回答。为我工作。如果我误解了你,请详细说明一下。看不出问题。

标签: mysql


【解决方案1】:

它对我有用。使用var_dump() 仔细检查您的PHP 变量$category_ids,即

我用您提供的样本数据对其进行测试。

SELECT es_super_parent, es_id 
    FROM ephpb2b_categories 
    WHERE es_id IN (1, 2, 4, 5, 6, 6, 76);

以及下表架构:

CREATE TABLE ephpb2b_categories (
    es_id INT PRIMARY KEY,
    es_super_parent INT NOT NULL,
    FOREIGN KEY (es_super_parent) REFERENCES ephpb2b_categories (es_id)
) ENGINE=InnoDB;

并插入了一些数据:

INSERT INTO ephpb2b_categories (es_id, es_super_parent) VALUES
    (0, 0),
    (1, 1),
    (76, 76),
    (2, 76),
    (3, 2),
    (4, 4),
    (5, 5),
    (6, 6),
    (66, 6);

这是一个有效的SQL Fiddle

【讨论】:

  • @user3445065 - 不客气。另外,喜欢就点个赞吧。谢谢!
  • 他没有足够的声誉这样做:)
猜你喜欢
  • 2021-11-25
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-09
相关资源
最近更新 更多