Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Стол заказов » Как найти свободный title?

Как найти свободный title?


 maks    28.02.2022    php    Стол заказов    840    15 комментариев

title пятизначное число (00001 00006 и тд)
Нужно в /inc/addnews.php найти первое по возрастанию число (не занятое новостью)


	$rel = $db->super_query("SELECT title
		FROM ".PREFIX."_post
		ORDER BY title DESC
........

Чёт я туплю, что и не знал уже забыл.

15 комментариев

maks
Юзер

maks - 1 марта 2022 18:20 -

Админы! Перенесите пожалуйста в стол заказов

maks
Юзер

maks - 11 марта 2022 13:14 -

***Комментарий удален***

maks
Юзер

maks - 21 марта 2022 12:51 -

Этот код выводит все существующие title новостей.

$rel = $db->query("SELECT title 
    FROM ".PREFIX."_post 
	WHERE 1
    ORDER BY title ASC
    LIMIT 0, 500
	");

while ($row = $db->get_row($rel))
{
  echo "<a href=\"#\" data-title=\"{$row['title']}\">{$row['title']}</a>";
}

выведет это:
00001
00003
00004
00005
00099
.....


Как вывести которых нет?
00002
00006
00007
.....

dj-avtosh
PHP-developer

dj-avtosh - 22 марта 2022 10:47 -



$rel = $db->query("SELECT title 
    FROM ".PREFIX."_post 
	WHERE 1
    ORDER BY title ASC
    LIMIT 0, 500
	");

$blobInterval = range(1, 99999);

$bILength = 5;

$blobInterval = array_map(function($v) use ($bILength){
    return str_pad($v, $bILength, 0, STR_PAD_LEFT);
}, $blobInterval);

while ($row = $db->get_row($rel))
{
  if (!in_array($row['title'], $blobInterval))
  {
    echo "<a href="#" data-title="{$row['title']}">{$row['title']}</a>";
  }
}


а вообще это делается в mysql с помощью except подходов.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

maks
Юзер

maks - 22 марта 2022 12:33 -

Этот вариант ничего не выводит

dj-avtosh
PHP-developer

dj-avtosh - 22 марта 2022 14:06 -

Решение отчасти верное, потому как добавится ко всему прочему еще то, что не существует в первом списке, допустим просто слово.

$rel = $db->query("SELECT title 
    FROM ".PREFIX."_post 
    WHERE 1
    ORDER BY title ASC
    LIMIT 0, 500
    ");

$blobInterval = range(1, 99999);

$bILength = 5;

$blobInterval = array_map(function($v) use ($bILength){
    return str_pad($v, $bILength, 0, STR_PAD_LEFT);
}, $blobInterval);

$titlesArr = [];

while ($row = $db->get_row($rel))
{
  $titlesArr[] = $row['title'];
}

$diffArr = array_diff($blobInterval, $titlesArr);

foreach($diffArr as $diffArrRow)
{

    echo '<a href="#" data-title="' . $diffArrRow. '">' . $diffArrRow . '</a>';

}

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 22 марта 2022 11:06 -

Либо так, в зависимости от поставленной задачи:

$array - это то, что нагенерировал Ваш запрос. Однако очень спорно, учитывая в запросе LIMIT (зачем он?)

$array = ['00001',
'00003',
'00004',
'00005',
'00099'];

$bILength = 5;

$blobInterval = range(min($array), max($array));

$blobInterval = array_map(function($v) use ($bILength){
    return str_pad($v, $bILength, 0, STR_PAD_LEFT);
}, $blobInterval);

foreach($blobInterval as $blobIntervalValue)
{
    
    if ( ! in_array($blobIntervalValue, $array) )
    {
        
        echo $blobIntervalValue . PHP_EOL;
        
    }
    
}

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

maks
Юзер

maks - 22 марта 2022 12:33 -

А здесь вывел 00000

dj-avtosh
PHP-developer

dj-avtosh - 22 марта 2022 13:32 -

можете вставить код в php-онлайн и посмотреть результат. Уверен, что просто неверно доработали код под себя.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

maks
Юзер

maks - 22 марта 2022 11:46 -

Лимит, был нужен в старом коде. В новом возможно нет. А задача, это чтобы не искать вручную не занятые title(артикул). Они должны быть все заняты. Иногда товары удаляются. А по клику на свободный, чтобы он копировался в поле title.
Доберусь до компа, проверю. За ранее спасибо. Для меня очень нужная вещь

dj-avtosh
PHP-developer

dj-avtosh - 22 марта 2022 14:21 -

Я думаю самое изящное решение:


$rel = $db->query("SELECT title 
    FROM ".PREFIX."_post 
    WHERE 1
    ORDER BY title ASC
    LIMIT 0, 500
    ");

$blobInterval = range(1, 99999);

$bILength = 5;

$blobInterval = array_map(function($v) use ($bILength){
    return str_pad($v, $bILength, 0, STR_PAD_LEFT);
}, $blobInterval);

$titlesArr = [];

while ($row = $db->get_row($rel))
{
  $titlesArr[] = $row['title'];
}

$arrayIntersect = array_intersect($blobInterval, $titlesArr);

$arrayDiff = array_diff($blobInterval, $arrayIntersect);

foreach($arrayDiff as $arrayDiffRow)
{

    echo '<a href="#" data-title="' . $arrayDiffRow. '">' . $arrayDiffRow . '</a>';

}


https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

maks
Юзер

maks - 22 марта 2022 16:41 -

Спасибо. ЯД актуален?

dj-avtosh
PHP-developer

dj-avtosh - 22 марта 2022 16:46 -

конечно

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

maks
Юзер

maks - 22 марта 2022 16:51 -

Перевел. Если аппетит больше, приму во внимание. Спасибо

dj-avtosh
PHP-developer

dj-avtosh - 22 марта 2022 16:51 -

Спасибо большое.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте
наверх