Автор Тема: Умный SQL запрос  (Прочитано 5209 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Умный SQL запрос
« : 26 Мая 2007, 05:00:32 »
Делаю выборку

SELECT  news_mod.*,reg_users_mod.id as u_id,reg_users_mod.login as u_login FROM news_mod LEFT JOIN reg_users_mod ON news_mod.author=reg_users_mod.id

т.е. в таблице reg_users_mod находится id и совмещяется с author из news_mod

есть такая фишка что author может быть = 0...т.е. нету..тогда надо бырать что-то вроде reg_users_mod.anonymous=\'Y\'

и обязательно всё в одном запросе...можн как-нить такое сделать..видел что вроде есть if в sql но как то не получилось сделать

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Умный SQL запрос
« Ответ #1 : 01 Июня 2007, 18:11:34 »
"И вы еще спрашиваете, а при чем здесь Perl?..."

База данных какая?

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Умный SQL запрос
« Ответ #2 : 02 Июня 2007, 05:55:11 »
MySQL...перл ни при чём )

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Умный SQL запрос
« Ответ #3 : 05 Июня 2007, 16:57:31 »
up

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Умный SQL запрос
« Ответ #4 : 06 Июня 2007, 10:16:16 »
решил сам...если кому понадобится

SELECT a.*,ELT((b.login <=> NULL)+1,b.login,(SELECT login FROM reg_users_mod WHERE anonymous=\'Y\')) u_login
FROM `news_mod` as a
LEFT JOIN reg_users_mod as b ON a.author=b.id
WHERE 1
ORDER BY b.login ASC

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Умный SQL запрос
« Ответ #5 : 06 Июня 2007, 12:15:24 »
DartSidius

Ужос... это Вы называете одним запросом? Я вижу 2 селекта как минимум, даже не считая того, что селект вложеный...

А вот так работает IF

SELECT t1.*, t2.*, IF(t1.author = 0, \'Y\', \'N\') AS anonimnus
FROM table1 t1 LEFT JOIN table2 t2 ON t1.author = t2.id;

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Умный SQL запрос
« Ответ #6 : 06 Июня 2007, 12:31:02 »
всё равно у тебя немного не то...а иф тоже вариант возможен но всё равно прийдётся делать подзапрос...будет тогда так

SELECT a.*,if(b.login is NULL ,(SELECT login FROM reg_users_mod WHERE anonymous=\'Y\'),b.login) as u_login
FROM `news_mod` as a
LEFT JOIN reg_users_mod as b ON a.author=b.id
WHERE 1
ORDER BY u_login ASC

теж яйца только в профиль :)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28