php - SQL 建议 - 从表中选择多行作为内部联接

标签 php mysql sql doctrine

我一直在开发一个项目,到目前为止只需要从连接表中查找 1 行。但现在我需要抓取多行..

就目前情况而言,我的 sql 工作原理如下:

为该特定项目的每个公司选择行,仅此行即可找到公司详细信息(名称、ID、电话......等等)。 然后我加入一个表,其中包含为每个公司提交的表单数据(多个表单 - 因此多个记录)

到目前为止,我一直在指定一个要在连接中查找的表单,但现在我需要指定多个表单。

如果我使用 WHERE form_id = 1 OR form_id = 2 OR form_id = 3 ... 我只会得到每个公司找到的第一个表单匹配的结果。

如果我混合查询,它会首先查找表单,并为每个公司返回具有不同表单数据的多个记录 - 从这个意义上说是有效的..

但是我随后在 View 中循环访问该数组,并为每条记录创建一个表行(之前每行都是一家新公司),但使用后者会导致同一家公司显示多个记录。

有什么办法可以做到这一点吗?我尝试使用后一种方法group by,但这再次导致只有 1 条记录。

    SELECT DISTINCT p.project_company_has_user_id, p.project_company_has_user_project_id, p.project_company_has_user_user_id, c.company_id, c.company_hall_no, c.company_company_name, c.company_type, c.company_country, c.company_stand_number, c.company_image_file_1, p2.project_id, p2.project_name, u.user_id, u.user_username, o.orders_id, o2.order_detail_id, o2.order_detail_product_id, f2.form_question_has_answer_id, f2.form_question_has_answer_request, f2.form_question_has_answer_form_id, f2.form_question_has_answer_user_id 
    FROM project_company_has_user p 
    INNER JOIN company c ON p.project_company_has_user_company_id = c.company_id 
    INNER JOIN project p2 ON p.project_company_has_user_project_id = p2.project_id 
    INNER JOIN user u ON p.project_company_has_user_user_id = u.user_id 
    INNER JOIN form f ON p.project_company_has_user_project_id = f.form_project_id 
    LEFT JOIN orders o ON p.project_company_has_user_user_id = o.orders_user_id 
    LEFT JOIN order_detail o2 ON ((o2.order_detail_orders_id = o.orders_id AND (o2.order_detail_product_id = 65 OR o2.order_detail_product_id = 68 OR o2.order_detail_product_id = 64))) 
    LEFT JOIN form_question_has_answer f2 ON ((f2.form_question_has_answer_form_id = 297 AND f2.form_question_has_answer_user_id = p.project_company_has_user_user_id)) 
    WHERE (f.form_template_name = "custom" AND p.project_company_has_user_garbage_collection = 0 AND p.project_company_has_user_project_id = 48) AND (LCASE(c.company_country) LIKE "%uk%" OR LCASE(c.company_country) LIKE "%uk%") ORDER BY company_company_name asc

最佳答案

您需要 order_detail 中的另一个字段作为 o2 。该字段为row_index(position)等用于定位记录

LEFT JOIN order_detail o2 ON (o2.row_index=1 AND (o2.order_detail_orders_id = o.orders_id AND (o2.order_detail_product_id = 65 OR o2.order_detail_product_id = 68 OR o2.order_detail_product_id = 64))) 

关于php - SQL 建议 - 从表中选择多行作为内部联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10243174/

相关文章:

mysql - Many 2 Many 中的递归方式排序

php - 在同一页面内将 javascript 变量值发送到 php

php - Javascript/jQuery : File download ready event

php - CakePHP 2.0 不保存

mysql - 如何删除MySQL中两个不同表中的重复字段

mysql 从一列返回不同的值,并按另一列的计数进行分组

php - 无法使用 MAMP 通过本地主机建立与 MySQL 的连接

php - 我可以将日期连接到我的字符串吗?

mysql - Django:具有动态变量数的原始 SQL 查询

聚合函数的 SQL Server 性能问题