2012-02-15 63 views
5

我在運行數據庫上的select查詢時遇到了一些問題。一些數據被保存爲逗號分隔值,一個示例的列表:在PHP中以逗號分隔值列表運行select

Table: example_tbl 
| Id | People | Children | 
| 1 | 1,2,3 | 8,10,3 | 
| 2 | 7,6,12 | 18,19,2 | 

而且那種我想要運行的東西的例子:

<?php 
    include 'class.php'; 
    $selection = 1; 
    $db = new DbClass; 
    $tbl_name = 'example_tbl'; 
    $sql = "SELECT * FROM $tbl_name WHERE ".$selection." IN People"; 
    $result = $db->query($sql); 
    $print_r($result); 
?> 

上面的腳本在People列中找到'1'後返回第1行,但很明顯我已經將其刪除。

我遇到的問題是,我認爲我有向後的IN語句,即我認爲這種方法將選擇值,如果$選擇是一個逗號分隔(內爆)列表,而不是我嘗試的方式使用它。

我不知道是否對我從上面的db類發送和接收的內容太重要,但是如果你想知道,它只是一個簡單的腳本,它運行所有相關的位並返回一個結果數組。此刻它沒有任何回報,因爲它沒有找到匹配

在此先感謝您提供任何可以告訴我的信息。

乾杯 -Dave

回答

16

爲什麼人們在一列中堅持以逗號分隔的數據值的這個瘋狂的習慣,而不是正常的正常化數據庫設計。它總是導致問題。

SELECT * 
    FROM $tbl_name 
WHERE CONCAT(',',People,',') LIKE '%,".$selection.",%'"; 

SELECT * 
    FROM $tbl_name 
WHERE FIND_IN_SET(".$selection.",People); 
+0

不幸的是,這不是我的數據庫,我做的一個非常過時的網站上,有企業的一些工作。但乾杯,這就像一個魅力。而且非常快速;) – 2012-02-15 23:25:33

+1

如果它是一個傳統的數據庫,然後油門我的原始數據庫設計師:) – 2012-02-15 23:26:26

+0

他實際上仍然在那裏工作,但他即將退休,我不認爲他甚至提供了一個單一的吶喊。但是我會爲他加油! – 2012-02-15 23:30:07