【问题标题】:SQL Select x-row from table2 if y.table1=y.table2 multiple tablesSQL Select x-row from table2 if y.table1=y.table2 多个表
【发布时间】:2013-04-05 07:11:24
【问题描述】:

我有 2 个不同的表格:categoriesproducts。每个表都有category_id 列。 为了在SELECT-ing 时输出数组,我使用的是echo htmlentities

在产品category_id=categories category_id 中选择产品名称和价格等字段的 SQL 语法是什么? (行标题相同 -> 名称(在产品上)和名称(在 cat 上)。

请记住,我首先要根据产品表中的标准选择产品,然后如果 category_id 来自 cat。表等于产品表中的 category_id 然后它将显示类别名称(在类别表中)

这是原始代码:

<?php
include('includes/global.php');

$sql = $db->query("SELECT name FROM ".DB_PREFIX."products WHERE active=1 AND closed=0 AND deleted=0 AND approved = 1 AND name LIKE '%".htmlentities($_GET["search"],  ENT_QUOTES)."%' LIMIT 20");

while($product_array = $db->fetch_array($sql)) {
    echo htmlentities($product_array["name"], ENT_QUOTES, $lang[codepage])."\n";
}

这是我尝试过的:

$sql = $db->query("SELECT a.name,a.buy_price,c.name FROM ".DB_PREFIX."products a WHERE active=1 AND closed=0 AND deleted=0 AND approved = 1 AND name LIKE '% ".htmlentities($_GET["search"],  ENT_QUOTES)."%' INNER JOIN ".DB_PREFIX."categories c ON a.category_id = c.category_id LIMIT 20");

while($product_array = $db->fetch_array($sql)) {
    echo htmlentities($product_array["name"], ENT_QUOTES, $lang[codepage])." for ";
    echo htmlentities($product_array["buy_price"], ENT_QUOTES, $lang[codepage])." from category ";
    echo htmlentities($product_array[" * categoryname"], ENT_QUOTES, $lang[codepage])."\n";
}

有什么建议吗?

【问题讨论】:

  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 这是 MySQL @a_horse_with_no_name

标签: php mysql sql select


【解决方案1】:

这是我得到的最终代码,在搜索时我没有得到任何输出(在相应的搜索框中)。我个人认为合并两个表中的数据存在问题。或者也许我这不是回显 htmlentities 的正确方法。

$sql = $db->query("SELECT a.name,c.name,a.buyout_price FROM ".DB_PREFIX."auctions a INNER JOIN ".DB_PREFIX."categories c ON a.category_id = c.category_id WHERE active=1 AND closed=0 AND deleted=0 AND approved = 1 AND a.name LIKE '% ".htmlentities($_GET["search"],  ENT_QUOTES)."%' LIMIT 20");

while($product_array = $db->fetch_array($sql)) {
    echo htmlentities($product_array["a.name"], ENT_QUOTES, $lang[codepage])." from category ";
    echo htmlentities($product_array["c.name"], ENT_QUOTES, $lang[codepage])." for ";
    echo htmlentities($product_array["a.buyout_price"], ENT_QUOTES, $lang[codepage])." EUR \n";}

【讨论】:

    【解决方案2】:

    我认为这是一个排序问题,需要先构建整个表格。

    SELECT a.name,a.buy_price,c.name FROM ".DB_PREFIX."products a 
    INNER JOIN ".DB_PREFIX."categories c ON a.category_id = c.category_id 
    WHERE active=1 AND closed=0 AND deleted=0 AND approved = 1 AND name LIKE '% ".htmlentities($_GET["search"],  ENT_QUOTES)."%' 
    LIMIT 20
    

    【讨论】:

    • 我收到错误:运行脚本时发生 Mysql 错误:您尝试运行的查询无效 Mysql 错误输出:where 子句中的列 'name' 不明确 SQL 查询:SELECT a .name,c.name,a.buy_price FROM table_products a INNER JOIN table_categories c ON a.category_id = c.category_id WHERE active=1 AND closed=0 AND deleted=0 AND approved = 1 AND name LIKE '% va%' and “va”是我的键盘搜索输入。这是一个搜索建议顺便说一句。
    • 尝试使用 a.name,因为 name 在 products 表中的别名下
    • 我试过了。请看看它现在的样子。我没有输出
    猜你喜欢
    • 2013-02-28
    • 2014-06-17
    • 2014-01-20
    • 2017-11-15
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多