簡體   English   中英

查詢逗號分隔列表mysql中的查找值

[英]Query find value in comma seperated list mysql

在我的腳本中,“餐廳”可以有多個位置,因此,我在餐廳表中創建了一個列,其中包含帶有位置的昏迷分隔列表。

現在,我想進行一個msql查詢,以檢查是否可以在此列(逗號分隔列表)中找到ID,如果可以,則選擇它。 我想出了這個

SELECT restaurant_id,restaurant_name 
FROM restaurant WHERE ('.$locIdList.') IN (locationRes) 
ORDER BY restaurant_name ASC'

它的確起作用...但是我有一些餐廳,在其中我添加了位置16和17,所以(16,17)現在,當我對位置16進行此查詢時,它顯示了餐廳,但是當我為位置17點了此位置時,它沒有顯示。但是,關鍵是要從逗號分隔的列表中獲取多個值。

那么該怎么做呢?

您應該避免將多個值放在單個列中。

相反,建議創建另一個表locations(location_id, col1, col2, restaurant_id) ,而restaurant_id字段引用表restaurant的主鍵。

如果要從數據庫中提取逗號分隔的列表,則可以使用PHP分隔列表並創建每個項目的數組。

$result_of_sql = "restaurant 1, restaurant 2, restaurant 3, restaurant 4, restaurant 5, restaurant 6";

$restaurants = explode(',', $result_of_sql);

echo '<ul>';
foreach ($restaurants as $restaurant) {
  echo '<li>' . trim($restaurant) . '</li>';
}
echo '</ul>';

首先,您退出所有餐廳(以逗號分隔的列表)。 然后,使用explode去除逗號並創建一個數組。 然后,您使用foreach循環將整個數組回顯出來。 trim只是通過刪除餐廳名稱前后的空白來清理所有內容。

最好的解決方案是創建一個關系表,以實現餐廳和位置之間的多對多關系。 然后,您可以使用解決方案,例如如何在MySql中返回具有相同列值的行,以查找所有位置的所有餐廳。

要在逗號分隔的列表中搜索值,請使用FIND_IN_SET 但這一次只能搜索一個值。 如果要查找所有位置的餐廳,則需要組合多個調用:

$locArray = explode(',', $locIdList);
$locQuery = implode(' AND ', array_map(function($loc) { return "FIND_IN_SET($loc, locationRes)"; }, $locArray));
$query = "SELECT restaurant_id,restaurant_name 
          FROM restaurant 
          WHERE $locQuery
          ORDER BY restaurant_name ASC";

如果要查找位於任何位置而不是所有位置的餐廳,請將AND更改為OR

您可以使用PHP為每個逗號分隔值生成查詢。 例如,對逗號分隔的比較字符串運行PHP循環,將其轉換為單個項目,然后通過LIKE運算符和IN()函數比較每個項目。

SELECT restaurant_id,restaurant_name 
FROM restaurant WHERE ('16') IN (locationRes) 
OR 
FROM restaurant WHERE ('17') IN (locationRes) 
ORDER BY restaurant_name ASC'

暫無
暫無

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

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