Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сравнение столбца в одной и той же таблице

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Помогите написать правильное сравнение в mysql
ketovpavel
Отправлено: 17 Ноября, 2014 - 15:26:41
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2014  


Помог: 0 раз(а)




Например:

PHP:
скопировать код в буфер обмена
  1.  
  2. $reply_to_name_guest = mysql_result(mysql_query("SELECT name_guest FROM comments WHERE comm_id_parent = чему то"),0);
  3.  


На скриншоте я указал, что мне надо сравнить comm_id_parent с (id 1) но как это сделать?

Или вообще такое не возможно?
Прикреплено изображение (Нажмите для увеличения)
screen_94.jpg
 
 Top
esterio
Отправлено: 17 Ноября, 2014 - 15:36:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




PHP:
скопировать код в буфер обмена
  1. $result = mysql_query('SELECT name_guest FROM comments WHERE comm_id_parent = id');
  2. if($result)
  3. {
  4.     $row = mysql_fetch_assoc($result);
  5. }
  6. else
  7. {
  8.     die(mysql_error());
  9.  
  10. var_dump($row);
  11. }
 
 Top
Sail
Отправлено: 17 Ноября, 2014 - 15:47:43
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




esterio, серьезно?
ketovpavel, для этого существуют псевдонимы.
Например, так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t1.`field1`, t2.`field1` FROM `table1` t1 JOIN `table1` t2 ON t2.`id` = t1.`parent_id`

или 'left join', чтобы выбрать из t1 ещё и те, что не ссылаются на t2...

(Отредактировано автором: 17 Ноября, 2014 - 15:52:34)

 
 Top
ketovpavel
Отправлено: 17 Ноября, 2014 - 15:48:49
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2014  


Помог: 0 раз(а)




Работает!!! Радость
esterio пишет:
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query('SELECT name_guest FROM comments WHERE comm_id_parent = id');
  2. if($result)
  3. {
  4.     $row = mysql_fetch_assoc($result);
  5. }
  6. else
  7. {
  8.     die(mysql_error());
  9.  
  10. var_dump($row);
  11. }


Спасибо огромное, Вы мне очень помогли!
А я битые два часа пытался составить, но даже близко к этому не было... Не понял

(Отредактировано автором: 17 Ноября, 2014 - 15:49:44)

 
 Top
esterio
Отправлено: 17 Ноября, 2014 - 15:50:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Sail
там же одна таблица. я так понял это дерево. и автор топика ищет строкы в которых совпадает два поля
 
 Top
Sail
Отправлено: 17 Ноября, 2014 - 15:53:33
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




esterio пишет:
Sail
там же одна таблица. я так понял это дерево. и автор топика ищет строкы в которых совпадает два поля

Да, таблица одна Улыбка
Но стрелочка-то к другой строчке на скриншоте...
 
 Top
ketovpavel
Отправлено: 17 Ноября, 2014 - 16:03:32
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2014  


Помог: 0 раз(а)




Да Ваш вариант то же работает спасибо!
Sail пишет:
esterio пишет:
Sail
там же одна таблица. я так понял это дерево. и автор топика ищет строкы в которых совпадает два поля

Да, таблица одна Улыбка
Но стрелочка-то к другой строчке на скриншоте...

Не ожидал, что вариантов будет несколько Закатив глазки
 
 Top
esterio
Отправлено: 17 Ноября, 2014 - 16:10:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Sail пишет:
Но стрелочка-то к другой строчке на скриншоте...

просто в таком случае не надо ничего джойнить. достаточно просто сравнения
 
 Top
Sail
Отправлено: 17 Ноября, 2014 - 16:25:52
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




esterio пишет:
Sail пишет:
Но стрелочка-то к другой строчке на скриншоте...

просто в таком случае не надо ничего джойнить. достаточно просто сравнения

не достаточно.
'WHERE comm_id_parent = id' возвращает только те строчки, у которых равны значения перечисленных полей.
Стрелочка же на скриншоте явно указывает, что в одной строке результата выборки должны присутствовать значения выбранных полей из разных строк исходной таблицы.
Следовательно.... Хорошо
 
 Top
esterio
Отправлено: 17 Ноября, 2014 - 16:31:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




я устал что-то доказивать. на скринште вся таблица а ен то что должно получиться. все я пас. ТС уже решил проблему
 
 Top
ketovpavel
Отправлено: 17 Ноября, 2014 - 16:48:11
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2014  


Помог: 0 раз(а)




Sail прав, то что если использовать способ esterio то сравнение получается если к примеру comm_id_parent = 2 то выбирается всё равно name_guest из id 1 а мне нужно если comm_id_parent = 2 то и выбирать он должен id 2
(Добавление)
Sail пишет:
esterio, серьезно?
ketovpavel, для этого существуют псевдонимы.
Например, так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t1.`field1`, t2.`field1` FROM `table1` t1 JOIN `table1` t2 ON t2.`id` = t1.`parent_id`

или 'left join', чтобы выбрать из t1 ещё и те, что не ссылаются на t2...


Sail Опишите пожалуйста по подробней как использовать Ваш способ в моем примере, а то как оказалось у меня тупо сравнение идет только по 1 id а это значит что я не правильно использую примеры
(Добавление)
По идее всё должно сравниваться, но нет ни фига не сравнивает, что не так?
PHP:
скопировать код в буфер обмена
  1.  
  2. $reply_to_name_guest = mysql_result(mysql_query("SELECT t1.`name_guest`, t2.`name_guest` FROM `comments` t1 JOIN comments t2 ON t2.`id` = t1.`comm_id_parent`"),0);
  3.  

(Отредактировано автором: 17 Ноября, 2014 - 17:16:12)

 
 Top
Sail
Отправлено: 18 Ноября, 2014 - 09:02:54
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




ketovpavel, например:
PHP:
скопировать код в буфер обмена
  1.     $sQuery = "select t1.`id` as id, t1.`name_guest` as `name`, t2.`id` as parent_id, t2.`name_guest` as parent_name from `comments` t1 join `comments` t2 on t1.`comm_id_parent` = t2.`id`";
  2.     $result = mysql_query($sQuery);
  3.     if($result === FALSE) {
  4.         exit('('.mysql_errno().'):'.mysql_error());
  5.     }
  6.     while($row = mysql_fetch_assoc($result)) {
  7.         var_dump($row);
  8.     }
  9.  

И разбираем результат выборки.
Если имеется конкретное значение id строки, для которой надо найти имя того, кому отвечаем, и такая запись может быть только одна, то можно так:
PHP:
скопировать код в буфер обмена
  1.     $sQuery = "select t2.`name_guest` from `comments` t1 join `comments` t2 on t1.`comm_id_parent` = t2.`id` where t1.`id` = {$id}";
  2.     $result = mysql_query($sQuery);
  3.     if($result !== FALSE) {
  4.         list($reply_to_name_guest) = mysql_fetch_array($result, MYSQL_NUM);
  5.     } else {
  6.         exit('('.  mysql_errno().'): '.  mysql_error());
  7.     }
  8.     var_dump($reply_to_name_guest);
 
 Top
ketovpavel
Отправлено: 18 Ноября, 2014 - 10:46:55
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2014  


Помог: 0 раз(а)




Sail Огромнейшее Вам спасибо, был бы миллионером подарил бы Вам миллион Радость !

Вот теперь всё правильно работает, а то скорей всего esterio неправильно меня понял , то что мне на самом деле нужно.

Если выбирать по строке в которых совпадает два поля то я делаю так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $reply_to_name_guest = mysql_result(mysql_query("SELECT name_guest FROM comments WHERE comm_id_parent = id"),0);
  3.  

Разве так неправильно и нужно делать какую то ещё проверку? Однако

(Отредактировано автором: 18 Ноября, 2014 - 10:47:27)

 
 Top
Sail
Отправлено: 18 Ноября, 2014 - 11:20:12
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




ketovpavel пишет:
Если выбирать по строке в которых совпадает два поля то я делаю так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $reply_to_name_guest = mysql_result(mysql_query("SELECT name_guest FROM comments WHERE comm_id_parent = id"),0);
  3.  

Разве так неправильно и нужно делать какую то ещё проверку? Однако

mysql_query() может вернуть не результат запроса, а значение FALSE.
В этом случае функция:
PHP:
скопировать код в буфер обмена
  1. string mysql_result (resource $result , int $row [, mixed $field = 0 ])
, ожидающая данные определённого типа (ресурс) "выйдет из себя" Улыбка
 
 Top
ketovpavel
Отправлено: 18 Ноября, 2014 - 11:39:23
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Нояб. 2014  


Помог: 0 раз(а)




Sail теперь понятно спасибо!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB