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 :: Как понять sql-запрос

 PHP.SU

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


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

> Без описания
rafaello9
Отправлено: 04 Ноября, 2015 - 11:08:04
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2011  


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




Друзья!
Подскажите, что значит этот чудесный sql-запрос? Что значат эти буквы j, n.
CODE (SQL):
скопировать код в буфер обмена
  1. $query = "SELECT statid FROM " . O_TABLEPREFIX . "jobs j, " . O_TABLEPREFIX . "stats_newsletters n WHERE j.queueid=n.queueid AND j.jobid='" . (int)$jobid . "'";

В таблице `stats_newsletters` есть столбцы `statid` и `queueid`, а в таблице `jobs` есть столбцы `jobid` и `queueid`
 
 Top
SAD Модератор
Отправлено: 04 Ноября, 2015 - 11:14:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




 
 Top
rafaello9
Отправлено: 04 Ноября, 2015 - 13:00:53
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2011  


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




Перечитал в инернете информацию по алиасам, но все равно, в голове каша.
1. Отсутствуют словосочетания AS
2. Вообще, правильно ли составлен запрос, если в таблице `jobs` есть столбцы `jobid` и `queueid`, но там нет `statid`. Просто дело в том, что этот запрос иногда срабатывает, а иногда выдает ошибку.
3. Пожалуйста, переведите на понятный русский язык, типа:"Выбрать значение в столбце `statid` ..... и т.д."
 
 Top
Klinch
Отправлено: 04 Ноября, 2015 - 13:37:47
Post Id


Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Июль 2012  


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




Чтобы было проще разобраться в запросе, рекомендую подставить реальные значения вместо переменных O_TABLEPREFIX и $jobid

Вот так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT statid FROM pref_jobs j, pref_stats_newsletters n WHERE j.queueid=n.queueid AND j.jobid='25'


Теперь запрос не выглядит так страшно и понять его гораздо легче



А теперь я его переведу на русский язык:
ВЫБРАТЬ statid ИЗ ТАБЛИЦ pref_jobs (запомнить как j) и pref_stats_newsletters (запомнить как n), ГДЕ j.queueid = n.queueid И j.jobid='25'

Переведу еще точнее:
j.queueid - означает: "Столбец `queueid` из таблицы `j` (которая была запомнена в начале как таблица pref_jobs)"
n.queueid - означает: "Столбец `queueid` из таблицы `n` (которая была запомнена в начале как таблица pref_stats_newsletters)"


Тот-же самый запрос еще можно выполнить так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `statid` FROM `pref_jobs`, `pref_stats_newsletters` WHERE `pref_jobs`.`queueid`=`pref_stats_newsletters`.`queueid` AND `pref_jobs`.`jobid`='25'

(Отредактировано автором: 04 Ноября, 2015 - 13:58:54)

 
 Top
rafaello9
Отправлено: 04 Ноября, 2015 - 14:42:47
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2011  


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




Ой спасибо! Что то стало проясняться....
Но все-таки два вопроса остались:
1. Отсутствуют словосочетания AS (во всех методичках по алиасам указано это словосочетание, но здесь его нет. Это нормально?)
2. Как можно выбрать `statid` из таблицы `jobs`, если в этой таблице такого столбца нет? Не говорит ли это о том, что запрос неправильный?

Еще раз спасибо за помощь
 
 Top
Klinch
Отправлено: 04 Ноября, 2015 - 15:15:29
Post Id


Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Июль 2012  


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




rafaello9
Цитата:
1. Отсутствуют словосочетания AS (во всех методичках по алиасам указано это словосочетание, но здесь его нет. Это нормально?)

Тут не подскажу, но думаю, что это нормально

Цитата:
2. Как можно выбрать `statid` из таблицы `jobs`, если в этой таблице такого столбца нет? Не говорит ли это о том, что запрос неправильный?

Нет, не говорит. Вы выбираете `statid` только из той таблицы, в которой он есть. Вторая таблица просто как-бы подключается к запросу, чтобы можно было использовать её данные. Однако, при желании, можно выбирать и использовать данные и сразу из двух таблиц и больше.

(Отредактировано автором: 04 Ноября, 2015 - 15:55:43)

 
 Top
Viper
Отправлено: 04 Ноября, 2015 - 17:35:18
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




rafaello9 пишет:
Отсутствуют словосочетания AS (во всех методичках по алиасам указано это словосочетание, но здесь его нет. Это нормально?)
нормально, но для удобочитаемости всё же лучше указывать. Особенно когда запрос в десятки строк.

Klinch пишет:
можно выбирать и использовать данные и сразу из двух таблиц и больше
главное не забывать указывать алиас таблицы из которой выбирать, иначе при одинаковых колонках можно запросто поймать ошибку.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 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