簡體   English   中英

MySQL:在單個查詢中從數據庫和PHP數組中獲取值

[英]Mysql: fetch value from database and php array in single query

mixed_menu

mixed_menu

SELECT mixed.unique_id, 
MENU_LABEL 
      case 
          when (--something...)
FROM mixed_menu mixed 
ORDER BY mixed.position ASC

問題:我想編寫一個mysql查詢,該查詢可以在以下情況下檢索unique_id,MENU_LABEL。

  • 情況1:

    如果類型=='db_category',則從數據庫( 1.db_category )中檢索標簽 ,其中id = unique_id

  • 情況2:

    如果type =='category',則從php數組( 2.PHP Array )中檢索數組值 ,其中array key = unique_id


1. db_category

db_category

2. PHP數組

$category_array = array('car'  => 'All Cars', 
                        'jeep' => 'All Jeeps'
                       );

如果您使用php數組創建了一個新表,則會更容易。

但是使用您當前的結構,您可以創建一個臨時/偽表,如下所示

SELECT * FROM (
  SELECT 'car' as `id`, 'All Cars' as `label`
  UNION
  SELECT 'jeep' as `id`, 'All Jeeps' as `label`
) php

因此,您可以使用類似-

SELECT mm.unique_id,

CASE
  WHEN mm.type = 'db_category' THEN dbc.label
  WHEN mm.type = 'category' THEN php.label
END as menu_label

FROM mixed_menu mm

LEFT JOIN db_category dbc ON mm.unique_id = dbc.id

LEFT JOIN (
  /*Create fake table*/
  SELECT 'car' as `id`, 'All Cars' as `label`
  UNION
  SELECT 'jeep' as `id`, 'All Jeeps' as `label`
) php ON mm.unique_id = php.id

ORDER BY mm.position ASC

這里是一個SQLFiddle例子- http://sqlfiddle.com/#!2/5630cc/5

然后,您將需要使用php數組來構建該假表。

編輯

由於您的mixed_menudb_category表是COLLATION latin1_swedish_ci db_category ,並且使用SELECT UNION默認為COLLATION utf8_general_ci您需要在SELECT UNION聲明它

SELECT * FROM (
  SELECT 'car' COLLATE latin1_swedish_ci as `id`, 'All Cars' COLLATE latin1_swedish_ci as `label`
  UNION
  SELECT 'jeep' COLLATE latin1_swedish_ci as `id`, 'All Jeeps' COLLATE latin1_swedish_ci as `label`
) php    

所以現在查詢將是

SELECT mm.unique_id,

CASE
  WHEN mm.type = 'db_category' THEN dbc.label
  WHEN mm.type = 'category' THEN php.label
END as menu_label

FROM mixed_menu mm

LEFT JOIN db_category dbc ON mm.unique_id = dbc.id

LEFT JOIN (
  /*Create fake table*/
  SELECT 'car' COLLATE latin1_swedish_ci as `id`, 'All Cars' COLLATE latin1_swedish_ci as `label`
  UNION
  SELECT 'jeep' COLLATE latin1_swedish_ci as `id`, 'All Jeeps' COLLATE latin1_swedish_ci as `label`
) php ON mm.unique_id = php.id

ORDER BY mm.position ASC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM