多表查询分页和搜索返回所有表的结果,但如果它们没有其他表,则不从主表返回

时间:2014-08-13 20:23:59

标签: php mysql search pagination

这就是我所拥有的:

我有表1,它是parties表。它列出了本月安排的所有各方。

我有4个其他表,每个表都包含我们使用的派对恩惠类型。

party_toys
party_drinks
party_foods
party_balloons

我需要查询周六开始的各方,并将其列回年初。

我已经完成了这个。

我需要做的是弄清楚如何从聚会表中搜索聚会名称并搜索所有聚会优惠表并列出结果。

这个星期六仍然排序到年初,并过滤掉我们没有任何好处的派对。

目前我只能通过派对表中的派对名称进行搜索。我无法弄清楚如何同时搜索所有这些。

我还需要对所有这些进行分页。

我目前正在进行分页工作,但它目前列出了所有内容,包括没有分配好处的各方。

我被困住了。这有意义吗?

结构

对于聚会表:

| party_id | parent_id | party_title | party_description | party_start | party finish |

对于party_drinks表:

| party_id | drink_id | drink_title | drink_notes |

对于party_foods表:

| party_id | food_id | food_title | food_notes |

对于party_toys表:

| party_id | toy_id | toy_title | toy_notes |

对于party_balloons表:

| party_id | balloon_id | ballon_title | balloon_notes |

1 个答案:

答案 0 :(得分:0)

SELECT parties.*, party_toys.*, party_drinks.*, party_foods.*, party_balloons.*
FROM parties
INNER JOIN party_toys ON parties.id = party_toy.party_id 
INNER JOIN party_drinks ON parties.id = party_drinks.party_id 
INNER JOIN party_foods ON parties.id = party_foods.party_id 
INNER JOIN party_balloons ON parties.id = party_balloons.party_id 
WHERE parties.title LIKE "%Super party%"
OR party_toys.toy_title LIKE "%Super toy 9000%"
OR party_drinks.drink_title LIKE "%Tequila%"
OR party_foods.food_title LIKE "%Burger%"

这将选择所有表格中的所有数据,因此您可以随意自定义要选择的信息。然后它将链接所有这些,并根据您在WHERE上设置的参数,它将返回您要求的东西。

此外,对于分页,您可以使用网址中的get参数执行此操作:

your_site.com/search.php?page=12

在查询前获取页码:

if( isset($_GET['page']) and is_int($_GET['page']) )
    $page = $_GET['page'];
else
    $page = 0;

$results_per_page = 20;
$offset = $page * $results_per_page;

获得页码后,只需在查询末尾添加此参数

$query = "all the query i wrote above";
$auer .= " LIMIT ".$offset.", ".$results_per_page;