2010-01-17 9 views
34

Jak mogę pobrać pole tekstowe z tabeli mysql db, ale nie cały tekst, tylko kilka 40 znaków.MySQL/SQL pobiera pierwsze 40 znaków z pola tekstowego?

Czy można to zrobić w sql, czy też muszę to zrobić za pomocą php?

zasadniczo próbuję zrobić to pokazać pierwsze x znaków, a następnie pozwolić użytkownikowi na kliknięcie, aby wyświetlić pełną treść.

Odpowiedz

55
SELECT LEFT(field, 40) AS excerpt FROM table(s) WHERE ... 

Zobacz funkcję LEFT().

Jako zasada kciuka, nigdy nie powinieneś robić w PHP tego, co MySQL może zrobić dla ciebie. Pomyśl o tym w ten sposób: nie chcesz przesyłać niczego więcej, niż jest to absolutnie konieczne z DB do aplikacji wnioskujących.


EDITJeśli masz zamiar użyć wszystkich danych na tej samej stronie (czyli bez wniosku pośredniego) częściej niż nie, nie ma żadnego powodu nie aby pobrać pełny tekst na raz. (Zobacz komentarze i Veger's answer.)

+0

pełna wersja jest wymagana, gdy użytkownik kliknie na nim, więc teraz są transmitowania więcej informacji: krótki łańcuch ** i ** pełny ciąg! W ten sposób złamanie własnej reguły ... – Veger

+0

@Veger Niekoniecznie. Może masz rację, ale OP wspomina tylko "kliknięcie" - może to być link do strony z pełnym tekstem (np. Element wiadomości), w którym to przypadku nie chcesz go pobrać, aby wygenerować tylko lista zwiastunów. Innymi słowy: Biorąc pod uwagę ilość szczegółów, nie mogę podać * najlepszego sposobu na zrobienie tego, wystarczy podać pewną regułę (które są - w swojej naturze - często, ale nie zawsze, prawda). – jensgram

+0

Masz rację, zależy to od informacji, które nie zostały podane! – Veger

1

Można to zrobić w SQL, jak pokazano na innych.

Jeśli jednak chcesz, aby chciał pokazać pełny tekst, jeśli użytkownik kliknie na niego, musisz również pełny tekst i wydaje się marnotrawstwem, aby baza danych przesłała ci krótki i pełny tekst. Możesz więc pobrać pełny tekst i napisać kod, aby wyświetlić krótki tekst i pełny tekst, gdy użytkownik go kliknie.

$result = mysql_query('SELECT text FROM table'); 
$row = mysql_fetch_row($result); 
echo '<div onclick="alert(\''.$row[0].'\');">'.substr($row[0], 0, 40).'</div>'; 

Oczywiście można zrobić coś ładniejszego po kliknięciu na nim (zamiast alert()). Możesz również teraz sprawdzić PHP, czy oryginał ma mniej niż 40 znaków i radzić sobie z takimi sytuacjami.

+0

Dokładnie! Jeśli cały tekst ma być używany częściej niż nie, nie ma powodu, aby * nie * pobierać wszystkie naraz. – jensgram

+0

Przypuszczalnie, że John chce krótkiego tekstu, ponieważ użytkownik będzie żądał tylko krótkiego tekstu dla większości wierszy i może chcieć tylko pełnego tekstu dla kilku wierszy? Albo to albo użytkownik kliknie, aby wyświetlić nową stronę z innymi informacjami. – Cocowalla

3

spróbować tego ...
SELECT lewo (nazwę pola, 40) z nazwy tabeli, gdzie stan do pierwszej 40 i
SELECT RIGHT (nazwa pola, 40) z nazwy tabeli, gdzie stan dla ostatnich 40

0

Sprawdź ten, jak również,

mysql_query('SELECT LEFT('your text/fieldname', 40) FROM tablename');