@IceJOKER
Web/Android developer

Как последовательно вывести данные из mysql?

Есть таблица с баннерама:
id/name/link/city/region
где
id - id баннера
name - название
link - ссылка
city - геотаргетинг по городу
region - геотаргетинг по региону
примечение: если city или region пусты, то значит что баннер не прикреплен к геоданным и показывается всегда

Нужно вывести последовательно по одному баннеру учитывая геолокацию пользователя.
будем считать что:
$user_city = Город пользователя
$user_region = Регион пользователя

select * from banners where city = '' and region = ''
union
select * from smc_banners where city = '$user_city' or region = '$user_region'

//код получает все баннеры, которые прикреплены к гео данным пользователя и баннеры, без геопривязки, нужно теперь как-то вывести последовательно по одному баннеру

более хороший код
select * 
from banners 
((city = '$user_city' or city = '') and (region = '$user_region' or region = ''))

//Получает все баннеры, у которых нет привязки к гео и все баннеры, которые привязаны к гео текущего пользователя
  • Вопрос задан
  • 2554 просмотра
Решения вопроса 1
@Snewer
То есть вывести? Если вам нужно вывести данные на страницу, то воспользуйтесь, к примеру PHP:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$data = $mysqli->query("SELECT * 
FROM `banners`
((`city` = '$user_city' OR `city` = '') AND (`region` = '$user_region' OR `region` = ''))");
$data = fetch_all(MYSQLI_ASSOC);
foreach($data as $q){
    echo "<a href="{$q['link']}">{$q['name']}</a>";
}


// другой вариант:
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$max_n = $mysqli->query("SELECT COUNT(*) as q
FROM `banners`
((`city` = '$user_city' OR `city` = '') AND (`region` = '$user_region' OR `region` = ''))");

if($n > $max_n) $n = $max_n;

$data = $mysqli->query("SELECT COUNT(*) as q
FROM `banners`
((`city` = '$user_city' OR `city` = '') AND (`region` = '$user_region' OR `region` = '')) ORDER BY `id` LIMIT $n, 1");

начинаете с перебирать с $n = 1 до $max_n соответственно
значение $n хранить в сессии либо в NoSQL
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы