Страница 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'