Страница 4 из 5

Re: PHP MySQL

Добавлено: Пт фев 02, 2018 13:06:56
Викторович
igor'OK
Появился новый вопрос.
Есть две таблицы users и chatlist.
Первая users - таблица пользователей с колонками id и uname. С данными:
id uname
1 Вася
2 Петя
3 Петров
4 Иванов
5 Сидоров

Вторая таблица chatlist - список чатов в которой есть колонка recipient куда заносятся id с таблицы пользователей. С данными:
recipient
1
3
4

Пытаюсь сделать список пользователей с id (из таблицы users) которых нет в chatlist (колонка recipient).
Пытаюсь сделать так:
$qr = "SELECT id, uname FROM users WHERE id NOT IN (SELECT recipient FROM chatlist)";
$rs = mysql_query($qr);
while($rw = mysql_fetch_object($rs)):
$list .= '<option value="'.$rw->id.'">'.$rw->uname.'</option>';
endwhile;

Выдает ошибку что не верное условие. Не могу понять что не так.
Полный список с таким запросом выводится без проблем:
$qr = "SELECT id, uname FROM users WHERE id>0";
$rs = mysql_query($qr);
while($rw = mysql_fetch_object($rs)):
$list .= '<option value="'.$rw->id.'">'.$rw->uname.'</option>';
endwhile;

Посмотри пожалуйста что не так с NOT IN.
Может это нужно делать как то через JOIN...

Re: PHP MySQL

Добавлено: Пт фев 02, 2018 13:28:11
levsha
Ну зачем, зачем "пересказывать" "Выдает ошибку что не верное условие."?? Разве трудно просто скопипастить текст ошибки?

P.S. Подозреваю что база на MyISAM а не на InnoDB, и поэтому не поддерживает вложенные запросы, поэтому нужно через LEFT JOIN:
SELECT id, uname FROM users LEFT JOIN chatlist ON users.id = chatlist.recipient WHERE chatlist.recipient IS NOT NULL

Re: PHP MySQL

Добавлено: Пт фев 02, 2018 15:14:59
Викторович
levsha
Вот так в РНР:
$qr = "SELECT id, uname FROM users LEFT JOIN chatlist ON users.id = chatlist.recipient WHERE chatlist.recipient IS NOT NULL";
$rs = mysql_query($qr);
while($rw = mysql_fetch_object($rs)):
$list .= '<option value="'.$rw->id.'">'.$rw->uname.'</option>';
endwhile;

А вот ошибка:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in d:\usr\local\apache\htdocs\base\chat\chatnew.php on line 17

Re: PHP MySQL

Добавлено: Пт фев 02, 2018 15:20:32
levsha
Потому что нельзя так писать код. Всегда надо проверять код возврата!
То есть должно быть что-то типа

$rs = mysql_query($qr)
If( !$rs ) {
die('Invalid query: ' . mysql_error());
}

Причем если открыть документацию, то там именно так и будет: http://php.net/manual/en/function.mysql-query.php

Re: PHP MySQL

Добавлено: Пт фев 02, 2018 15:27:04
Викторович
Добавил код возврата:
Invalid query: Column: 'id' in field list is ambiguous

Re: PHP MySQL

Добавлено: Пт фев 02, 2018 15:37:58
Викторович
Сделал так:
$qr = "SELECT * FROM users LEFT JOIN chatlist ON users.id = chatlist.recipient WHERE chatlist.recipient IS NOT NULL GROUP BY recipient";
ошибок нет.
Но получаю список id из таблицы users, которые есть в таблице chatlist в колонке recipient.
А надо наоборот, получать список id которые не попадаются в recipient.

Re: PHP MySQL

Добавлено: Пт фев 02, 2018 16:03:05
oreh
Викторович писал(а):Добавил код возврата:
Invalid query: Column: 'id' in field list is ambiguous

ну правильно говорит, джойнишь 2 таблицы, в обоих есть такое поле. Укажи явно, что выбираешь
SELECT users.id, ... FROM users....

Re: PHP MySQL

Добавлено: Пт фев 02, 2018 16:11:14
Викторович
oreh
Указал.
Ошибки нет, но получаю список id из таблицы users, которые есть в таблице chatlist в колонке recipient.
А надо наоборот, получать список id которые не попадаются в recipient.

Re: PHP MySQL

Добавлено: Пт фев 02, 2018 16:45:07
Викторович
О,
$qr = "SELECT * FROM users LEFT JOIN chatlist ON users.id = chatlist.recipient WHERE chatlist.recipient IS NULL GROUP BY recipient";
убрал NOT.
Теперь работает как надо.
Спасибо всем за помощь!!!

Re: PHP MySQL

Добавлено: Пт июл 19, 2019 12:12:07
Викторович
Всем привет!
есть новый вопрос.
По примерам из интернета написал вот такой скрипт:
<script>
$(document).ready(function(){
$("#1").click(function(){
if ($("#1").is('.one')){
$('#1').removeClass('one');
$("#1").addClass("two");
$('.block_plan').css('max-height', '100%');}
else if($('#1').is('.two')){
$('#1').removeClass('two');
$('#1').addClass('one');
$('.block_plan').css('max-height', '');}
});});
</script>
Суть скрипта такая: при нажатии на кнопку с id="1" и классом "one", div c классом "block_plan" растягивается по высоте и класс кнопки меняется. При повторном див уменьшается и опять меняется класс кнопки.
Все работает, НО для одной кнопки и одного дива.
У меня на странице несколько дивов (таблиц). Если я им задаю всем один класс "block_plan", то при нажатии на кнопку - все таблицы раскрываются.
Сейчас для каждой таблицы есть своя кнопка и свой класс и свой скрипт.
А как сделать один скрипт, но что бы конкретная кнопка растягивала конкретный див???

Re: PHP MySQL

Добавлено: Пт июл 19, 2019 14:18:35
bykovdima
Викторович
div-ам давать уникальные айди-шки, например, кнопка #btn1, #btn2, дивы #div1, #div2
обработчик клика навешивать на кнопки не по айди-шке, а по классу.
в обработчике получать айди-шку кнопки, "добывать" из нее номер (для нашего примера - отрезать первые три символа), этот номер добавлять к строке 'div' и ты получишь айди-шку того дива, который тебе нужно развернуть или свернуть
надеюсь алгоритм понятно объяснил
з.ы. или еще проще, если айди кнопки 1, то просто склеивай со строкой 'div' и получишь 'div1'

Re: PHP MySQL

Добавлено: Пт июл 19, 2019 14:49:04
bykovdima
примерно вот так
Код:
    $('.btn').click(function() {
        var btnIdNum = $(this).attr('id').substr(3);

        if ($(this).is('.one')) {
            $(this).removeClass('one').addClass("two");
            $('#div'+btnIdNum).css('max-height', '100%');
        } else if ($(this).is('.two')) {
            $(this).removeClass('two').addClass("one");
            $('#div'+btnIdNum).css('max-height', '');
        }
    });


хотя вот эти классы one \ two не нужны и можно сделать вот так
Код:
    $('.btn').click(function() {
        var btnIdNum = $(this).attr('id').substr(3);

        if ($('#div'+btnIdNum).css('max-height') == '') {
            $('#div'+btnIdNum).css('max-height', '100%');
        } else {
            $('#div'+btnIdNum).css('max-height', '');
        }
    });


а если я правильно понял, что див нужно показать или скрыть
то лучше вот так
Код:
    $('.btn').click(function() {
        $('#div'+$(this).attr('id').substr(3)).toggle();
    });

есс-но на кнопки навешать класс 'btn', и айди-шки кнопок и див-ов должны совпадать по принципу 'btn123' ==> 'div123', дивам стили 'display: none;' чтобы по умолчанию были скрыты

Re: PHP MySQL

Добавлено: Пт июл 19, 2019 15:00:48
Викторович
bykovdima
классами one \ two я меняю внешний вид кнопки. С + на - и наоборот.

Re: PHP MySQL

Добавлено: Пт июл 19, 2019 15:04:37
Викторович
В твоем первом примере .btn это класс для кнопки?

Re: PHP MySQL

Добавлено: Пт июл 19, 2019 15:23:12
bykovdima
Викторович писал(а):классами one \ two я меняю внешний вид кнопки. С + на - и наоборот.

тогда
Код:
    $('.btn').click(function() {
        $('#div'+$(this).attr('id').substr(3)).toggle();
        $(this).toggleClass('one').toggleClass('two');
    });


Викторович писал(а):В твоем первом примере .btn это класс для кнопки?

да (во всех примерах). именно btn, class='btn' id='btn1'. а div id='div1'