Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从数据库中获取项目列表_Mysql_Sql_Database - Fatal编程技术网

Mysql 从数据库中获取项目列表

Mysql 从数据库中获取项目列表,mysql,sql,database,Mysql,Sql,Database,在我的数据库中,我有两个表: 1. "subjects" table: that include 2 fileds: *id, *desctiption, 2. "subSubjects" table that include 4 fileds: *id, *Desctiption, *subject_id, *department_id (primary key of departments table). 我需要返回主题列表,每个主题都包含匹配子主题列表, 有一种方法

在我的数据库中,我有两个表:

1. "subjects" table: that include 2 fileds:
    *id, *desctiption,
2. "subSubjects" table that include 4 fileds: 
   *id, *Desctiption, *subject_id, *department_id (primary key of departments    table).
我需要返回主题列表,每个主题都包含匹配子主题列表, 有一种方法可以做到这一点,而无需使用select INDER selecet STANTIONS? (加入或加入另一个国家)? *我有一个类——“Subject”,其中包括一系列子主题

视图中的结果需要如下所示:

*****************************
subject * sub-subject * dep *
*****************************
sub_1   * sub sub1    * 1   *
        *********************
        * sub sub2    * 2   *
*****************************
sub_2   * sub sub 4   * 1   *
*****************************
sub_3   * sub sub 3   * 1   *
        *********************
        * sub sub 5   * 2   *
        *********************
        * sub sub 6   * 2   *
*****************************

从'subjects'中选择s.id、ss.description、ss.department\u id作为s
内部连接'subSubjects'作为s.id=ss.subject\u id上的ss


看一看,这将解释您需要了解的有关创建内部联接和其他类型SQL语句的基础知识。

使用以下查询:

SELECT
CASE WHEN t.id = (SELECT TOP 1 id -- Sub query
FROM Subsubjects t3
WHERE t3.subject_id = t.subject_id
ORDER BY t3.id) THEN q.description
ELSE ''
END AS Subjects, t.description AS Subsubjects, t.department_id
FROM Subsubjects t
LEFT JOIN subjects q ON q.id = t.subject_id
ORDER BY t.id
它将返回预期的数据,如下所示:

*****************************
  subject * sub-subject * dep *
  *****************************   
  sub_1   * sub sub1    * 1   *
    *********************
          * sub sub2    * 2   *
  *****************************
  sub_2   * sub sub 4   * 1   *
  *****************************
  sub_3   * sub sub 3   * 1   *
    *********************
          * sub sub 5   * 2   *
    *********************
          * sub sub 6   * 2   *
*****************************
下面是我们如何处理sql查询的列表对象的示例:

public List<Product> GetAllProducts() //GetAllProducts() is a list-type method
{
    Query = "SELECT * FROM Products";

    Command = new SqlCommand(Query, Connection);

    Connection.Open();

    Reader = Command.ExecuteReader();

    List<Product> products = new List<Product>(); //Created a list

    while (Reader.Read())
    {
        Product product = new Product(); //Created an object from the class
        product.ProductId = Convert.ToInt32(Reader["ProductID"]);
        product.CategoryId = Convert.ToInt32(Reader["CategoryID"]);
        product.ProductName = Reader["ProductName"].ToString();
        product.Details = Reader["Details"].ToString();
        product.Price = (double)Reader["Price"];
        product.Stock = Convert.ToDouble(Reader["Stock"]);

        products.Add(product); //Finally bind the object with the list
    }

    Reader.Close();
    Connection.Close();

    return products;
}
public List GetAllProducts()//GetAllProducts()是一个列表类型方法
{
Query=“从产品中选择*”;
Command=newsqlcommand(查询、连接);
Connection.Open();
Reader=Command.ExecuteReader();
列表产品=新建列表();//创建了一个列表
while(Reader.Read())
{
Product Product=new Product();//从类创建了一个对象
product.ProductId=Convert.ToInt32(读卡器[“ProductId]”);
product.CategoryId=Convert.ToInt32(读卡器[“CategoryId]”);
product.ProductName=Reader[“ProductName”].ToString();
product.Details=Reader[“Details”].ToString();
product.Price=(双)读卡器[“Price”];
product.Stock=Convert.ToDouble(读卡器[“Stock”]);
products.Add(product);//最后将对象与列表绑定
}
Reader.Close();
Connection.Close();
退货产品;
}

如果所有子主题始终与某个主题相关,则应尝试内部联接, 否则尝试左外连接

SELECT   as Subject, 
       subSubjects.Description as SubSubject, 
       department_id as Dep 
FROM subSubjects
INNER JOIN Subjects
ON Subjects.id=SubSubjects.subject_id
ORDER BY Subjects.description


添加一些样本表数据,以及预期的结果。什么是“一些样本表数据”?您想查看该视图吗?我想以最佳和最快的方式使用。我们想查看数据库中的一些数据以及您希望实现的结果视图。谢谢@Taacoo解释。(有时我只是没有耐心…)在连接之后,我得到一个带有主题id的表,将其转换为主题对象列表(每个主题都包含其中的子主题列表)shuold I to use group?更改了SQL以提供所需的数据。您可以根据需要更改除联接之外的所有列名。确保在任何列名前面加上s。或者党卫军。关于各自的表名好的,谢谢,但是我如何收集主题?我想从此表中创建列表?如果您只需要主题id,请在选择参数中键入它。我不想在表中创建所有文件,但我想将其拆分并按主题id对其进行分组。。。你明白我的问题吗?你能把答案转换成我的数据表吗?我不知道如何使用我的数据…好的。我给你一个样品。检查这个:我仍然不明白如何转换这个硬代码。。。你能帮我换算一下吗?好的。等待我给你,等等。几分钟。返回的是什么?表中有主题描述sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_sub_,您可能还没有看到它们。我如何添加图像?现在我得到了由主题id生成的表,但如何将此结果表转换为java中的主题列表?我得到了具有subject_id的行,我想收集一个subject对象中具有相同subject_id的所有行(并将它们放在这个subject对象内的列表中),有一种方法可以返回按subject_id排序但不相乘的表,比如我添加到问题中的表。。。?