[SQL] WordPress – statystyka komentarzy, najczęściej komentujący

Wpis opisuje akcję dosłownie sprzed chwili. Napisał do mnie m4tx z prośbą o napisanie zapytania SQL, które pobierało by komentarze z WordPressa, każdemu użytkownikowi przypisując ilość napisanych przez niego komentarzy. Jestem zdziwiony, gdyż udało mi się to zrobić za pierwszym razem (potem musiałem jedynie dodać DISTINCT-a, o którym zapomniałem).

Jak pewnie wie, każdy kto programuje, w tej dziedzinie mało co wychodzi za pierwszym razem :D Tak czy siak postanowiłem podzielić się swoim dziełem:

SELECT DISTINCT comment_author AS author, (SELECT COUNT(comment_ID) FROM wp_comments WHERE comment_author = author) AS amount FROM wp_comments WHERE comment_approved = 1 ORDER BY amount DESC

Takie oto zagnieżdżone zapytanie doskonale rozwiązuje nasz problem :) Poniżej demonstruję wynik działania zapytania na danych z mojego bloga (to nie jest pełny wynik rzecz jasna :) nie ma sensu wkładać do screena całych danych)

wordpress-comments-query

[SQL] WordPress – pobieranie najdłuższych wpisów

Witam, dziś bez zbędnego gadania, będzie bardzo krótko.

Przedstawiam to proste zapytanie SQL, które pobierze tytuły wpisów i ilość słów w nich zawartych oraz posortuje po ich ilości.

SELECT post_title, (LENGTH(post_content) - LENGTH(REPLACE(post_content, ' ', ''))) AS words FROM wp_posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY words DESC

Tak, to tyle. Na koniec screen z fragmentem wyniku działania na przykładzie mojego bloga:

<a href="http://sobak.pl/wp-content/uploads/wordpress-posts-query.png"><img class="aligncenter size-full wp-image-1536" alt="wordpress-posts-query" src="http://sobak.pl/wp-content/uploads/wordpress-posts-query.png" width="357" height="601" />

Amen, dobranoc państwu :)

Backupowanie baz danych MySQL z poziomu PHP

Na samym początku zaznaczam, że pierwowzór skryptu przedstawionego poniżej nie jest mojego autorstwa! Skrypt znalazłem <a href="http://www.tidnab.nowaruda.net/linux/360/prosty-backup-mysql-z-pomoca-php-lub-basha.html">tutaj (skrypt na samym dole artykułu). Dokonałem w nim kilku przeróbek i w tym miejscu zostawiam dla potomnych - może się komuś przyda! Czytaj dalej

Dwa nowe skrypty w Dev Center

Żeby moje nowe Dev Center (opublikowane wczoraj) nie świeciło pustkami toteż napisałem dwa nowe skrypty, które w dniu dzisiejszym dochodzą do jego skromnych zasobów.

Postanowiłem odpicować dwie z klas, których używanych przeze mnie w IronCMS-ie. Upiekłem przy tym dwie pieczenie na jednym ogniu. Po pierwsze: zyskałem nowe skrypty do kolekcji, a po drugie uzyskałem mocno poprawione klasy do użytku w kolejnych wersjach CMS-a (a te się powoli budują...).

Nie ma sensu się rozpisywać. Po prostu prezentuję:

Klasa do obsługi MySQL oraz powiązana z nią klasa loggera zdarzeń.

Wszelkie komentarze mile widziane ;)

[PHP] Pobranie najnowszych wpisów z WordPressa

W tym wpisie przedstawię prosty skrypt pobierający ostatnie wpisy z bloga opartego na WordPressie. Skrypt powinien działać co najmniej na wszystkich WP z gałęzi 3.x

Prezentuję dwie leciutko się różniące wersje pod wyświetlanie dokładnie jednego ostatniego wpisu i wyświetlaniu określonej ilości ostatnich wpisów.

Wersja na jeden wpis

<?php
// Database config
$db['host'] = 'serwer_twojej_bazy';
$db['user'] = 'nazwa_usera';
$db['pass'] = 'haselko';
$db['name'] = 'nazwa_bazy_danych';

@mysql_connect ($db['host'], $db['user'], $db['pass']) or die ('Nie udało się połączyć z bazą danych');
@mysql_select_db ($db['name']) or die('Nie udało się wybrać bazy danych.');

// Get title of newest post
$query = mysql_query ("SELECT `post_title` FROM `wp_posts` WHERE `post_status` = 'publish' AND `post_type`='post' ORDER BY `post_date`  DESC LIMIT 1") or die ('Nie udało się pobrać najnowszego wpisu');

$row = mysql_fetch_array ($query);
$post_title = $row['post_title'];
echo $post_title;
mysql_close();

Wersja na wiele wpisów

<?php
// Database config
$db['host'] = 'serwer_twojej_bazy';
$db['user'] = 'nazwa_usera';
$db['pass'] = 'haselko';
$db['name'] = 'nazwa_bazy_danych';
// Other config
$num_posts  = '5';

@mysql_connect ($db['host'], $db['user'], $db['pass']) or die ('Nie udało się połączyć z bazą danych');
@mysql_select_db ($db['name']) or die('Nie udało się wybrać bazy danych.');

// Get titles of newests posts
$query = mysql_query ("SELECT `post_title` FROM `wp_posts` WHERE `post_status` = 'publish' AND `post_type`='post' ORDER BY `post_date`  DESC LIMIT $num_posts;") or die ('Nie udało się pobrać najnowszego wpisu');

echo '<ul>';
while ($row = mysql_fetch_array ($query)) {
   echo "t<li>";
   echo $row['post_title'];
   echo "</li>n";
}
echo '</ul>';

mysql_close();

Sercem obu tych skryptów jest jedno zapytanie czyli:

SELECT `post_title` FROM `wp_posts` WHERE `post_status` = 'publish' AND `post_type`='post' ORDER BY `post_date`  DESC LIMIT *

różnicą jest jedynie różna wartość ustawienia LIMIT. W pierwszym skrypcie wynosi ona oczywiście jeden, ponieważ pobieramy tylko jeden wpis, a więc tylko jeden rekord. W drugim zaś zależy od ustawienia odpowiedniej zmiennej $num_posts w konfiguracji skryptu.

Oba warianty skryptu różnią się też oczywiście sposobem wyświetlenia pobieranych danych. W pierwszym jest to zwyczajne wywołanie funkcji mysql_fetch_array, w drugim zaś wypadku jest ona użyta w pętli, a wpisy pokazywane są jako lista nieuporządkowana, co można dość łatwo zmodyfikować do swoich potrzeb.

Przedstawione skrypty stanowią tylko swoisty "rdzeń". Musimy oprawić je w ramy dokumentu HTML i ewentualnie możemy ustawić dla nich style CSS.

Zdaję sobie sprawę, że przedstawione skrypty dla wielu osób mogą się wydawać banalne i źle napisane (przecież nie użyłem PDO i miliona wyjątków), ale mam nadzieję, że choć dla jednej początkującej osoby ten prosty skrypt stanie się jakąś bazą do dalszego eksperymentowania z SQL i PHP.