在多表列中具有多个术语的简单 PHP 过滤器

Posted

技术标签:

【中文标题】在多表列中具有多个术语的简单 PHP 过滤器【英文标题】:Simple PHP filter with multiple terms in multi table columns 【发布时间】:2018-05-14 03:34:25 【问题描述】:

我正在尝试实现一个搜索过滤器,该过滤器从 mysql 获取数据并应用多个条件,例如从多个表的列中选择和匹配用户。我想通过多个关键字在这些列中搜索,例如来自特定国家或城市且对音乐感兴趣的用户。

我想用大约 10 个表和它的列来实现这个

这是 3 个结构化表格结构的示例

Table User Profile (Main table)

ID | PID | Name | Email | Avatar

1 | 22 |  John | x@x.x | URL
---------------------------------
Table User details

ID | PID | Country | City | Address | HPhone | MPhone

1 |  22 |  Norway |  Bergenv addrews | 2222 |   2222 |
---------------------------------
Table User Interests

ID | PID | Interest | Type | Keyword

1 |  22 |  music | music | pop
---------------------------------
Printed Results format

PID, Name, Avatar

第一个 php 文件 file1.php

    <form class="user_search_form" action="file2.php" method="post"> 
    <select class="Interest_types" name="Interest" id="Interest">
    <option value="Retail">Music</option>      
    <option value="Transportation">Movies</option>      
    </select>   

    <select name="city" class="select_city">
    <option value="">City</option>
    <option value="">London</option>
    <option value="">New York</option>
    <option value="">Paris</option>
    </select>

    <input type="submit" value="search"  class="search_btn" />  
    </form>

当前第二个php文件files2.php

    //Limit our results within a specified range.
    $results = $mysqli->prepare("SELECT PID, Name, Avatar FROM Profile");
    $results->execute(); //Execute prepared Query
    $results->bind_result($PID, $Name, $Email, $$Avatar); //bind variables to prepared statement

    //Display records fetched from database.
    echo '<ul class="contents">';
    while($results->fetch()) //fetch values
        echo "<a href=\"/Profile.php?id=$PID\" onClick='Loading()'><li class=\"userlistitem\">";
        echo  "<img src='$Avatar' height='100' width='100' onerror=\"this.src = '/assets/img/noImg.png'\"/>";
        echo  "$Name  $Email $PasswordD";
        echo "</li></a>";
    
    echo '</ul>';

files2.php 中最好的 php 格式应该是什么?

我们非常需要和感谢您的帮助。

【问题讨论】:

【参考方案1】:

您可以在 mysql 中使用连接从这些表中选择您需要的所有数据。 一个例子是这样的:

SELECT up.PID, up.Name, up.Avatar FROM User Profile AS up
LEFT JOIN User Details AS ud ON ud.PID = up.PID
LEFT JOIN User Interests AS ui ON ui.PID = up.PID
WHERE ui.KeyWord = 'pop' AND ud.City = 'Bergenv'
ORDER BY up.Name ASC
LIMIT 10

然后只需添加尽可能多的连接即可过滤表。但是请注意不要在没有适当过滤的情况下添加很多,因为如果您需要连接多个包含数百行的表,它会减慢您的页面速度。因此,请仔细计划您的查询。

【讨论】:

非常感谢您的回答。如果我想向查询添加计数,对结果进行计数,它应该是什么样子? 要计算查询返回的行数,可以使用 $mysqli->num_rows($query);获取它或者您也可以使用 PHP count() 函数来执行此操作(但您需要先将结果存储到数组中才能使用 count() ) 我试过了,但没用 $get_total_rows = $results->num_rows();并尝试了这个,但它也没有用 $get_total_rows = num_rows($results); 请参阅此文档:secure.php.net/manual/en/mysqli-result.num-rows.php 了解 mysqli num rows 函数。如果查询成功执行,那么它应该可以正常工作。

以上是关于在多表列中具有多个术语的简单 PHP 过滤器的主要内容,如果未能解决你的问题,请参考以下文章

具有多个术语的 NEST 条件过滤器查询

Drupal 7:具有多个搜索词的搜索视图

过滤数据透视表列,仅在

使用 Impala 或 Hive 提取表列中的多个字符串元素

T-SQL 根据另一表列过滤一列上的多个值

使用多个术语和 Q 过滤器对 reduce 查询进行排序