2013-07-18 5 views
1

Я надеюсь, что кто-то может сказать мне, что я делаю неправильно.Усечение значения символа SQL

Я хотел бы запросить таблицу SQL и получить обратно ClassID и ClassName.

ClassID является символом (8) и имеет значение, такие как 123.45L1 или 350,12.

Я пытаюсь сократить это значение, так что я получаю обратно или только.

Вот мой код:

$classSelect = "SELECT LEFT(ClassID , 3), ClassName FROM Class GROUP BY ClassID"; 
    $result = mysql_query($classSelect); 

    echo "<td><select multiple size='10' name='Class'>"; 

    while ($row = mysql_fetch_array($result)) { 
     echo "<option value='Choice'" . $row['ClassID'] . " - " . $row['ClassName'] . "'>" . $row['ClassID'] . " - " . $row['ClassName'] . "</option>"; 
    } 
    echo "</select></td>"; 
+0

Зачем использовать GROUP BY ?? –

+0

@JoeTaras - возможно, чтобы выбрать уникальные значения, хотя этот подход, как правило, неодобрительно, потому что это феномен MySQL, который очень не соответствует стандартам SQL. –

+0

Но если вы используете GROUP BY ClassName, вы должны быть в списке по списку. Да, в MySql это нормально, но в других СУБД нет. После этого я не понимаю, в чем проблема? Наши друзья хотят показать слишком символов после полной остановки? Я предполагаю, что ClassName является полем таблицы Class. –

ответ

1
SELECT LEFT(ClassID , 3) AS somename, ClassName 

, а затем передать его в PHP, как $row['somename']

+0

Это сработало отлично! Спасибо огромное! – tylwright

1

Если вы ищете, чтобы извлечь строку до десятичной точки, и что, возможно, не всегда быть в том же месте, вы можете использовать функцию SUBSTRING_INDEX() в MySQL:

SELECT SUBSTRING_INDEX(ClassID, '.', 1) FROM Class 

Если вы ищете, чтобы извлечь целое число до первого недесятичных характера, вы можете просто CAST() строки и MySQL будут делать все остальное:

SELECT CAST(ClassID AS UNSIGNED) FROM Class 

Преимущество этого последнего подхода состоит в том, что в результате столбца будет иметь правильный тип данных.

Смежные вопросы