Такой запрос - не более чем просто строка, поэтому обрабатывайте ее одинаково - оператору необходимо знать, где находятся его границы, поэтому:
$topsearch_listings = mysqli_query($conn, "SELECT * FROM listing WHERE published='yes' AND topsearch=1 ". ($selected_category == 'All' ? '' : 'AND category=\''.$selected_category.'\'') ." ORDER BY rand()");
Убедитесь, что еще не знаете, что это не так. безопасно выполнять запросы, как это. Я бы предложил выполнить РАЗНЫЕ запросы для открытого случая (Все) и отдельных (где есть категория). Кроме того, вы должны использовать связанные переменные или, по крайней мере, попытаться экранировать ввод.