Не много обо всем. От рыбалки до вышивания крестиком.
Викторович
- Викторович
- Сообщений: 2040
- Зарегистрирован: Чт июн 07, 2007 12:14:39
- Откуда: Киев
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...
levsha
- levsha
- Сообщений: 10981
- Зарегистрирован: Сб май 07, 2011 21:13:36
- Откуда: Lachen
- Авто: PEUGEOT 5008 1.6 EAT6 GT Line
- Сайт
Re: PHP MySQL
Пт фев 02, 2018 13:28:11
Ну зачем, зачем "пересказывать" "Выдает ошибку что не верное условие."?? Разве трудно просто скопипастить текст ошибки?
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
Викторович
- Викторович
- Сообщений: 2040
- Зарегистрирован: Чт июн 07, 2007 12:14:39
- Откуда: Киев
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
levsha
- levsha
- Сообщений: 10981
- Зарегистрирован: Сб май 07, 2011 21:13:36
- Откуда: Lachen
- Авто: PEUGEOT 5008 1.6 EAT6 GT Line
- Сайт
Re: PHP MySQL
Пт фев 02, 2018 15:20:32
Потому что нельзя так писать код. Всегда надо проверять код возврата!
То есть должно быть что-то типа
$rs = mysql_query($qr)
If( !$rs ) {
die('Invalid query: ' . mysql_error());
}
Причем если открыть документацию, то там именно так и будет:
http://php.net/manual/en/function.mysql-query.php
Викторович
- Викторович
- Сообщений: 2040
- Зарегистрирован: Чт июн 07, 2007 12:14:39
- Откуда: Киев
Re: PHP MySQL
Пт фев 02, 2018 15:27:04
Добавил код возврата:
Invalid query: Column: 'id' in field list is ambiguous
Викторович
- Викторович
- Сообщений: 2040
- Зарегистрирован: Чт июн 07, 2007 12:14:39
- Откуда: Киев
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.
oreh
- oreh
- Сообщений: 9561
- Зарегистрирован: Вт май 06, 2008 16:42:22
- Откуда: Харьков
- Авто: Nissan Qashqai, 2.0CVT, 4WD, Tekna Pack
Re: PHP MySQL
Пт фев 02, 2018 16:03:05
Викторович писал(а):Добавил код возврата:
Invalid query: Column: 'id' in field list is ambiguous
ну правильно говорит, джойнишь 2 таблицы, в обоих есть такое поле. Укажи явно, что выбираешь
SELECT users.id, ... FROM users....
Викторович
- Викторович
- Сообщений: 2040
- Зарегистрирован: Чт июн 07, 2007 12:14:39
- Откуда: Киев
Re: PHP MySQL
Пт фев 02, 2018 16:11:14
oreh
Указал.
Ошибки нет, но получаю список id из таблицы users, которые есть в таблице chatlist в колонке recipient.
А надо наоборот, получать список id которые не попадаются в recipient.
Викторович
- Викторович
- Сообщений: 2040
- Зарегистрирован: Чт июн 07, 2007 12:14:39
- Откуда: Киев
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.
Теперь работает как надо.
Спасибо всем за помощь!!!
Викторович
- Викторович
- Сообщений: 2040
- Зарегистрирован: Чт июн 07, 2007 12:14:39
- Откуда: Киев
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", то при нажатии на кнопку - все таблицы раскрываются.
Сейчас для каждой таблицы есть своя кнопка и свой класс и свой скрипт.
А как сделать один скрипт, но что бы конкретная кнопка растягивала конкретный див???
bykovdima
- bykovdima
- Сообщений: 9906
- Зарегистрирован: Ср май 28, 2008 14:02:03
- Откуда: Николаев
- Авто: Nissan Qashqai, 2.0, CVT, 4wd, Tekna
Re: PHP MySQL
Пт июл 19, 2019 14:18:35
Викторович
div-ам давать уникальные айди-шки, например, кнопка #btn1, #btn2, дивы #div1, #div2
обработчик клика навешивать на кнопки не по айди-шке, а по классу.
в обработчике получать айди-шку кнопки, "добывать" из нее номер (для нашего примера - отрезать первые три символа), этот номер добавлять к строке 'div' и ты получишь айди-шку того дива, который тебе нужно развернуть или свернуть
надеюсь алгоритм понятно объяснил
з.ы. или еще проще, если айди кнопки 1, то просто склеивай со строкой 'div' и получишь 'div1'
bykovdima
- bykovdima
- Сообщений: 9906
- Зарегистрирован: Ср май 28, 2008 14:02:03
- Откуда: Николаев
- Авто: Nissan Qashqai, 2.0, CVT, 4wd, Tekna
Re: PHP MySQL
Пт июл 19, 2019 14:49:04
примерно вот так
- Код:
$('.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;' чтобы по умолчанию были скрыты
Викторович
- Викторович
- Сообщений: 2040
- Зарегистрирован: Чт июн 07, 2007 12:14:39
- Откуда: Киев
Re: PHP MySQL
Пт июл 19, 2019 15:00:48
bykovdima
классами one \ two я меняю внешний вид кнопки. С + на - и наоборот.
Викторович
- Викторович
- Сообщений: 2040
- Зарегистрирован: Чт июн 07, 2007 12:14:39
- Откуда: Киев
Re: PHP MySQL
Пт июл 19, 2019 15:04:37
В твоем первом примере .btn это класс для кнопки?
bykovdima
- bykovdima
- Сообщений: 9906
- Зарегистрирован: Ср май 28, 2008 14:02:03
- Откуда: Николаев
- Авто: Nissan Qashqai, 2.0, CVT, 4wd, Tekna
Re: PHP MySQL
Пт июл 19, 2019 15:23:12
Викторович писал(а):классами 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'
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.