MYSQL选择并加入结果

时间:2015-08-20 10:52:08

标签: php mysql select join

您好我正在寻找一个我们在工作中使用的小系统。系统使用3个表,引号,作业和详细信息。在这些表格中有几个字段,但我们关注的重点如下:

这是我的表和mysql语句的sqlfiddle

行情

  • quote_id
  • quotes_title

工作

  • JOB_ID
  • job_quoteid - job_quoteid存储作业所针对的报价的ID

详情

  • details_id
  • details_line
  • details_quoteid - details_quoteid存储详细信息相关报价的ID,可以有几个链接到报价的详细信息

我的搜索是根据我输入的搜索词查看每个表,并显示quote_id,job_id,quote_title和details_line。

这是我目前搜索的代码:

$fetch = mysql_query("SELECT * FROM quotes AS qts 
                      LEFT JOIN jobs AS jbs ON qts.quote_id=jbs.job_quoteid
                      JOIN details AS dts ON qts.quote_id=dts.quote_detailsid

                      WHERE concat(' ',qts.quote_code,qts.quote_id) like '%$param%'
                      OR qts.quote_title REGEXP '^$param'

                      OR concat(' ',jbs.job_code,jbs.job_id) like '%$param%'

                      OR dts.details_line LIKE '%$param%'
                     ");

while ( $row = mysql_fetch_object( $fetch ) ) {
    $sResults .= '<tr id="'. $row->job_id . '">';
    $sResults .= '<td><a href="../../jobs.php?action=viewJob&amp;job_id='. $row->job_id .'">'. $row->job_code . $row->job_id .'</a></td>';
    $sResults .= '<td><a href="../../quotes.php?action=viewQuote&amp;quote_id='. $row->quote_id .'">' . 'Q' . $row->quote_id . '</a></td>';
    $sResults .= '<td>' . $row->quote_title . '</td>';
    $sResults .= '<td>' . $row->details_line . '</td>
    </tr>';
}

现在我需要一些其他助手,搜索工作,但是例如,如果我输入“NCR”作为搜索词,它将显示4个结果,这是因为我有一个“NCR集”的quote_title “并且这个引用有4个detail_line到达它(这些detail_line不包含单词NCR)但显然它显示4因为它已经发现包含单词”NCR“的quote_id在每个中。因此,我的结果页面在表格行中有4个结果,其中quote_id,job_id,job_title和detail_line被显示,我希望它看起来是在一个job_id和quote_id下显示4个细节。如果我是手动编写表格,我会像下面这样做,以便给你一个想法:

<table>
 <tr>
    <td>quote_id</td>
    <td>job_id</td>
 </tr>
 <tr>
    <td>quote_title</td>
 </tr>
 <tr>
    <td>details_line</td>
    <td>details_line</td>
    <td>details_line</td>
    <td>details_line</td>
 </tr>
</table>

我希望这是有道理的,有些人可以把我推向正确的方向。

提前致谢。

伊恩

2 个答案:

答案 0 :(得分:2)

最简单的方法是将查询中的所有输出,即$row->job_id$row->quote_id等存储在数组(或变量)中,然后检查下一个是否存在job_idquote_id是唯一的。为此,您可以使用in_array()功能。

如果新if已经存在,您可以设置td语句在现有tr内附加id,或者只添加新tr }}

  

如果你愿意,我可以尝试为它编写一个可用的代码。为此,一个小提琴很容易!

答案 1 :(得分:0)

尝试使用这个希望,这可能有所帮助。

SELECT * FROM quotes AS qts 
Inner JOIN jobs AS jbs ON qts.quote_id=jbs.job_quoteid
Inner JOIN details AS dts ON qts.quote_id=dts.quote_detailsid

WHERE concat(' ',qts.quote_code,qts.quote_id) like '%NCR Sets%'
OR qts.quote_title REGEXP '^NCR Sets'

OR concat(' ',jbs.job_code,jbs.job_id) like '%NCR Sets%'

OR dts.details_line LIKE '%NCR Sets%'

group by qts.quote_id