【问题标题】:Executing Different mysql selects based on a field基于字段执行不同的mysql选择
【发布时间】:2020-08-26 09:23:06
【问题描述】:

我有一系列用于资产结帐系统的表格。有两种类型的资产......股票和资产。它们都将条形码存储在单独的表中。这就是我的桌子的样子

结帐表:(sipe_check_out)

+----+--------+----------+----------+-----+---------------------+----------+------+----------+
| id | job_id | stock_id | asset_id | qty | out_time            | user_out | note | depot_id |
+----+--------+----------+----------+-----+---------------------+----------+------+----------+
| 1  | 1625   | 0        | 1026     | 1   | 0000-00-00 00:00:00 | 1288     |      | 1        |
+----+--------+----------+----------+-----+---------------------+----------+------+----------+
| 2  | 1625   | 8        | 0        | 10  | 0000-00-00 00:00:00 | 1288     |      | 0        |
+----+--------+----------+----------+-----+---------------------+----------+------+----------+

条码表:(sipe_barcodes)

+----+----------+----------+---------+
| id | stock_id | asset_id | barcode |
+----+----------+----------+---------+
| 1  | 0        | 1026     | AR2221  |
+----+----------+----------+---------+
| 2  | 8        | 0        | MAR0001 |
+----+----------+----------+---------+

库存表:(sipe_stock)

+-----+------------+-----------+--------+----------+---------------------+------+--------------+------+-------------+
| id  | title      | alt_title | status | category | last_updated        | memo | replace_cost | flag | description |
+-----+------------+-----------+--------+----------+---------------------+------+--------------+------+-------------+
| 8   | Cable XLR  | Cable XLR | 2      | 10       | 2019-01-03 20:45:40 |      | 750          | 0    |             |
+-----+------------+-----------+--------+----------+---------------------+------+--------------+------+-------------+
| 237 | Fresnel 1K |           | 0      | 43       | 2019-01-02 19:08:45 |      | 12000        | 0    |             |
+-----+------------+-----------+--------+----------+---------------------+------+--------------+------+-------------+

资产表:(sipe_stock_asset)

+------+----------+-----+--------+--------+---------------------+------+---------------+-------------+-------+
| id   | stock_id | qty | serial | status | status_change       | memo | purchase_date | retire_date | depot |
+------+----------+-----+--------+--------+---------------------+------+---------------+-------------+-------+
| 1026 | 237      | 1   |        | 0      | 2019-01-02 19:09:00 | NULL | NULL          | NULL        | 1     |
+------+----------+-----+--------+--------+---------------------+------+---------------+-------------+-------+

我需要签出到特定 job_id 的所有项目的列表。这些项目都在结帐表中。但出于显示目的,我需要获取商品条形码(存储在条形码表中)、商品标题(存储在库存表中)和数量(存储在结帐表中)

这是我的问题。对于库存项目和资产项目,选择查询是不同的。 如果它是库存商品,则需要从结帐表中获取库存 ID,然后从库存表中获取标题,从结帐表中获取数量。

这是我获取库存商品的工作查询

SELECT 
sipe_barcodes.barcode,
sipe_stock.title,
sipe_check_out.qty,
sipe_check_out.out_time
FROM
sipe_barcodes
INNER JOIN sipe_stock ON (sipe_barcodes.stock_id = sipe_stock.id)
INNER JOIN sipe_check_out ON (sipe_stock.id = sipe_check_out.stock_id)
WHERE
sipe_check_out.job_id = 1625

这将返回以下内容

+---------+-----------+-----+---------------------+
| barcode | title     | qty | out_time            |
+---------+-----------+-----+---------------------+
| MAR0001 | Cable XLR | 10  | 0000-00-00 00:00:00 |
+---------+-----------+-----+---------------------+

如果商品是库存商品。我们从结帐中获取asset_id。但是我们需要从结帐表中获取 stock_id,以便我们可以从 stock 表中获取股票标题。结帐表中的数量和条形码表中的条形码

这是我获取资产项目的工作查询

SELECT 
sipe_barcodes.barcode, 
sipe_stock.title, 
sipe_check_out.qty, 
sipe_check_out.out_time
FROM sipe_check_out 
INNER JOIN sipe_stock_asset ON (sipe_check_out.asset_id = sipe_stock_asset.id) 
INNER JOIN sipe_stock ON (sipe_stock_asset.stock_id = sipe_stock.id) 
LEFT JOIN sipe_barcodes ON (sipe_check_out.asset_id = sipe_barcodes.asset_id) 
WHERE sipe_check_out.job_id = 1625

这会返回这个

+---------+------------+-----+---------------------+
| barcode | title      | qty | out_time            |
+---------+------------+-----+---------------------+
| AR2221  | Fresnel 1K | 1   | 0000-00-00 00:00:00 |
+---------+------------+-----+---------------------+

问题

我如何构造一个可以选择所有签出项目的单个 mysql 查询,无论它们是资产还是股票,产生以下输出

+---------+------------+-----+---------------------+
| barcode | title      | qty | out_time            |
+---------+------------+-----+---------------------+
| AR2221  | Fresnel 1K | 1   | 0000-00-00 00:00:00 |
+---------+------------+-----+---------------------+
| MAR0001 | Cable XLR  | 10  | 0000-00-00 00:00:00 |
+---------+------------+-----+---------------------+

非常感谢您的帮助

谢谢

【问题讨论】:

  • 您可以使用this 方法或使用union
  • 我花了更多时间来撰写问题以根据您的评论调整我的查询!谢谢。 Union ALL 为我成功了
  • 将此添加为答案而不是评论,以便我可以将其标记为已接受的答案以供将来参考。谢谢!
  • 谢谢。很高兴听到它有帮助。

标签: php mysql select conditional-statements


【解决方案1】:

您可以将UNION 与您提供的select 语句一起使用

SELECT 
    sipe_barcodes.barcode,
    sipe_stock.title,
    sipe_check_out.qty,
    sipe_check_out.out_time
FROM
    sipe_barcodes
        INNER JOIN
    sipe_stock ON (sipe_barcodes.stock_id = sipe_stock.id)
        INNER JOIN
    sipe_check_out ON (sipe_stock.id = sipe_check_out.stock_id)
WHERE
    sipe_check_out.job_id = 1625 

UNION ALL 

SELECT 
    sipe_barcodes.barcode,
    sipe_stock.title,
    sipe_check_out.qty,
    sipe_check_out.out_time
FROM
    sipe_check_out
        INNER JOIN
    sipe_stock_asset ON (sipe_check_out.asset_id = sipe_stock_asset.id)
        INNER JOIN
    sipe_stock ON (sipe_stock_asset.stock_id = sipe_stock.id)
        LEFT JOIN
    sipe_barcodes ON (sipe_check_out.asset_id = sipe_barcodes.asset_id)
WHERE
    sipe_check_out.job_id = 1625

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    相关资源
    最近更新 更多