С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 22

Не срабатывает условие

03.04.2015, 10:53. Показов 850. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Есть php скрипт:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while($i<=$numpri){
                            $teklogus=mysql_query("select * from log_stav where idstav=$teklowinnum",$db); //выбираем последнюю запись
                            $teklogus1=mysql_fetch_assoc($teklogus); 
                            $arwin=mysql_query("select * from wis",$db);
                            $arwin1=mysql_fetch_array($arwin);
                            $teklowinnum--;
                            $i++;
                            if(in_array($teklogus1['screen_name'], $arwin1)){
                                continue;
                            }
                            else{
                                echo $teklogus1['screen_name'];
                                $sc_name=$teklogus1['screen_name'];
                                $f_name=$teklogus1['first_name'];
                                $l_name=$teklogus1['last_name'];
                                $photo_b=$teklogus1['photo_big'];
                                $pri='1111';
                                $result2 = mysql_query ("INSERT INTO wis (sc_name,f_name,l_name,photo_b,pri) VALUES('$sc_name','$f_name', '$l_name', '$photo_b', '$pri')",$db);
                            }
                        }
Он выбирает последних 10 НЕПОВТОРЯЮЩИХСЯ пользователей из одной бд и переносит в другую. Точнее он должен это делать, но не хочет. Он записывает в БД всех последние 10 пользователей независимо от того, повторяются они или нет, то есть не срабатывает условие. Подскажите, пожалуйста, где ошибка?
Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.04.2015, 10:53
Ответы с готовыми решениями:

Не срабатывает условие
Есть такой вот код: $strSQL = &quot;INSERT INTO Dom(Name) values ('url&quot;); Нужно сделать, в случае успешного выполнения этого...

Не срабатывает условие if
Проблема заключается в следующем: условие if не срабатывает, в адресной строке браузера пишеться...

Не срабатывает простое условие
честно говоря первый раз такое вижу SELECT fio, nomer, datao, podrozd FROM new WHERE nomer = '123А456' ничего не возвращает, при том...

14
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
03.04.2015, 11:26
А не проще использовать "select distinct * from log_stav where idstav=$teklowinnum" или "select distinct * from wis"?

Добавлено через 3 минуты
Или в запросе сразу выбрать только неповторяющиеся.
0
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 22
04.04.2015, 08:51  [ТС]
Возможно проще. Подскажите, пожалуйста, оптимальную логику.
Есть две таблицы. Из одной таблицы надо выбрать последние n НЕповторяющихся строк записей и занести в другую таблицу.
попробовал как тест прописать:
PHP
1
2
3
$a=mysql_query("select DISTINCT * from log_stav",$db);
                            $b=mysql_fetch_assoc($a);
echo $b['screen_name']
Выводит только одну последнюю запись
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
04.04.2015, 09:03
Цитата Сообщение от Ral Посмотреть сообщение
Выводит только одну последнюю запись
Потому что mysql_fetch_assoc возвращает только 1 запись, а не все.

PHP
1
2
3
while($row = mysql_fetch_assoc($a)){
    echo $row['screen_name'];
}
0
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 22
04.04.2015, 16:00  [ТС]
PHP
1
2
3
4
$a=mysql_query("select DISTINCT * from log_stavok",$db);
                        while($row= mysql_fetch_assoc($a)){
                            echo $row['screen_name'];
                        }
в итоге выводит вообще все строки бд.
как можно ограничить вывод последних n строк?
почему может не срабатывать DISTINCT?
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
04.04.2015, 16:59
Цитата Сообщение от Ral Посмотреть сообщение
почему может не срабатывать DISTINCT?
Вместо * перечисли поля, которые совпадать могут. Может у тебя например какой нибудь id есть, и поэтому выводит все из таблицы.
0
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 22
04.04.2015, 18:37  [ТС]
тут наткнулся на такую сложность: надо, что бы с конца начиналось, а получается, что если первая и последняя строка бд одинаковые, то остается только первая, а надо с последней именно начинать?
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
09.04.2015, 05:15
Ral, Если они одинаковые то какая разница какую показывать?
0
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 22
09.04.2015, 18:38  [ТС]
разница в порядке, то есть та, что была последняя в log_stav, должна быть первой в wis. Если использовать DISTINCT, то он последние записи в log_stav убирает, а надо убирать первые, иначе получается, что последние записи в log_stav, как раз которые должны быть занесены в Wis пропадают, потому что уже одна есть
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
09.04.2015, 18:52
Записи ОДИНАКОВЫЕ!
Короче, вообще не понимаю что вы хотите.
Выводите полное описание всех таблиц и подробное описание того, что конкретно вы хотите с примерами.
0
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 22
09.04.2015, 19:09  [ТС]
смотрите.
в таблицу log_stav заносятся строки с 1 по n, с соответствующим id. записи могут повторяться.
когда срабатывает скрипт, то последние 10 неповторяющихся записей из log_stav надо записать в wis в обратном порядке, то есть, кто был в log_stav последним будет первым в wis, кто был предпоследним в log_stav, будет вторым в wis.
Если делать через distinct, то получается, что среди повторяющихся записей выбирается только первая запись, то есть с меньшим айди, остальные, как повторяющиеся отсеюваются.
Например: если в log_stav 150 строк, из которых строки с id 148 и 150 повторяющиеся. Так как переписывать из log_stav в wis надо в обратно порядке, то должно быть первая запись в wis строка из log_stav под id 150, вторая 149, третья 147. 148 мы отбрасываем потому что переписали ее раньше.
Если использовать distinct получается: первая строка в wis записывается из log_stav под id 149, вторая 148.
То есть при использовании distinct и order by строки из таблицы сперва извлекаются в порядке возрастания id, а потом отсеиваются, а надо наоборот.
ПС: прошу прощение за сумбурное изложение
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
10.04.2015, 07:23
Ral, Ну тогда делаешь выборку distinct + max(id)
И все что нужно и получаешь в одном запросе

Добавлено через 25 секунд
отличаются же только id?

Добавлено через 1 час 55 минут
Не знаю сработает ли это в одном запросе. Но если не получится, то делаешь запрос с distinct, проходишь по всем данным и выбираешь max(id) с совпадением данных. Вот и будет твоя неповторяющаяся последняя строка.
0
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 22
10.04.2015, 10:36  [ТС]
Цитата Сообщение от solar_wind Посмотреть сообщение
Ral, Ну тогда делаешь выборку distinct + max(id)
И все что нужно и получаешь в одном запросе
да, в этом запросе он выводит запись с самым большим id.
Цитата Сообщение от solar_wind Посмотреть сообщение
Не знаю сработает ли это в одном запросе. Но если не получится, то делаешь запрос с distinct, проходишь по всем данным и выбираешь max(id) с совпадением данных. Вот и будет твоя неповторяющаяся последняя строка.
хорошо, последнюю строку я записал, а как теперь записать предпоследнюю строку?

в итоге все равно надо создавать цикл в котором будет условие проверяющее есть ли уже эта запись в таблице wis(в которую переносятся поседнии 10), то есть опять надо использовать continue, а он почему-то не работает
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
10.04.2015, 10:50
Ral, distinct тебе гарантирует отсутствие повторений. Проходишь в цикле и добавляешь ее куда тебе надо, по порядку все строки. continue тут не причем, он не может не работать.
0
0 / 0 / 0
Регистрация: 05.12.2014
Сообщений: 22
13.04.2015, 09:26  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
$spispz=mysql_query("select * from prz",$db);
                        $numprz=mysql_num_rows($spispz);  //здесь мы узнаем количество пользователей, которых надо перекинуть из одного таблицы в другую
$i=1;
                        while($spispz>=$i){
                            $a=mysql_query("select DISTINCT+max(idstav) screen_name from log_stav order by idstav desc",$db);
                            while($row= mysql_fetch_assoc($a)){
                                echo $row['screen_name'];                        
                            }
                            $i++;
                        }
вот кусок кода, в котором, по идее, должны через цикл выводится последние n неповторяющихся пользователей, которых надоа перекинуть в другую таблицу. Писать он их не будет потому что я не знаю как выводить предпоследнего, предпредпоследнего и так далее пользователя, именно об этом я и спрашиваю

Добавлено через 14 часов 12 минут
Цитата Сообщение от solar_wind Посмотреть сообщение
Ral, distinct тебе гарантирует отсутствие повторений.
distinct выделяет первые записи, отсеивая последующие, а мне надо выделить последнюю, отсеивая предыдущие
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2015, 09:26
Помогаю со студенческими работами здесь

Почему срабатывает первое условие? проверка баланса
Почему срабатывает условие if ($get_balance &gt; 0), хотя баланс в базе стоит 0. $get_balance = mysqli_query($CONNECT,&quot;SELECT...

не срабатывает условие
не срабатывает условие? foreach ( DataGridViewRow x in dataGridView1.Rows) { if...

Не срабатывает условие в JS
Не уверен, сюда писать или в PHP. Тема и про то, и про другое... if(@$save_next) { $sql = &quot;SELECT zip_id, zip_status, zip_vidrem,...

Не срабатывает условие
IIf( = &quot;Арефьева&quot;;&quot;4&quot;;IIf( = &quot;Бондаренко&quot;;&quot;3&quot;)) Синтаксическая ошибка в выражении. Что не так?

НЕ срабатывает условие if
НЕ срабатывает условие if if (Edit_Use.Text = 'Брянка, Кировск, Стаханов, Первомайск') and (BKSP &lt;&gt; '44238') or (BKSP &lt;&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru