Читать таблицу MySQL до первой запятой - PullRequest
1 голос
/ 24 июля 2011

У меня есть этот запрос:

$sql = "SELECT * FROM tutorials WHERE ( device LIKE '%".$device."%' AND version LIKE '%".$version."%' AND firmware LIKE '%".$firmware."%' ) LIMIT 1";

Таблица:

device | a, b, c, d
version | 2, 3, 4
firmware | 5

Теперь я хочу получить первую строку из устройства (a), версии (2) и прошивки (5) до первой запятой или, если нет запятой, весь текст.

Я думал о explode(), но я действительно не знаю. Я бы предпочел php, так как хочу отображать цифры.

1 Ответ

2 голосов
/ 24 июля 2011

Решение MySQL:

SELECT  SUBSTRING_INDEX(`device`, ',', 1),
    SUBSTRING_INDEX(`version`, ',', 1),
    SUBSTRING_INDEX(`firmware`, ',', 1)
FROM `tutorials` WHERE `id`=123 LIMIT 1 /*
    Why LIMIT? `id` should be unique */

Решение PHP:

function first_value($str) {
    $pos = strpos($str, ',');
    if ($pos !== false)
        return substr($str, 0, $pos);
    return $str;
}
$q = mysql_query('SELECT * FROM `tutorials` WHERE `id`='. (int)$id .' LIMIT 1 ');
$arr = mysql_fetch_array($q);

$arr['device'] = first_value($arr['device']); // etc

Но, как сказал Kerrek SB, вы должны действительно нормализовать вашу таблицу.

...