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]   

> Без описания
duk
Отправлено: 20 Марта, 2011 - 16:00:55
Post Id



Частый гость


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


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




Есть работающий запрос к бд
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM ORDER LEFT jpin user ON ORDER.uid = user.id WHERE ORDER.date>'2010-01-01'
  3.  


На основе результатов запроса формируется страница со списком заказов
(дата, сумма, клиент, его контакт и так далее)
надо дополнить формируемую таблицу еще одной колонкой - количество заказов, которое всего сделал этот клиент
Что-то никак не соображу, как переписать селект?
 
 Top
vlom
Отправлено: 20 Марта, 2011 - 16:54:55
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010  
Откуда: Екатеринбург


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




SELECT * - это означает что выбираются все поля из таблицы
в чем у вас проблема возникает???
 
 Top
duk
Отправлено: 20 Марта, 2011 - 16:56:28
Post Id



Частый гость


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


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




хм, я вроде бы прямо написал:
++
надо дополнить формируемую таблицу еще одной колонкой - количество заказов, которое всего сделал этот клиент
++
 
 Top
OrmaJever Модератор
Отправлено: 20 Марта, 2011 - 17:04:13
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




1) Это самый яркий пример того как нужно писать название таблиц.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `ORDER` LEFT JOIN `user` ON `ORDER`.`uid` = `user`.`id` WHERE `ORDER`.`date`>'2010-01-01'

Даже здесь на форуме слово ORDER подсвечивается синтаксисом как зарезервированое.

2)
duk пишет:
надо дополнить формируемую таблицу еще одной колонкой - количество заказов

Причём селект если нужно добавить колонку?
duk пишет:
которое всего сделал этот клиент

а вот здесь явно не по русски...


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
vsll
Отправлено: 20 Марта, 2011 - 17:10:44
Post Id


Частый посетитель


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


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




duk пишет:
надо дополнить формируемую таблицу еще одной колонкой - количество заказов, которое всего сделал этот клиент
А в таблице ORDER в db у вас этот столбец есть?
Цитата:
SELECT * - это означает что выбираются все поля из таблицы
 
 Top
duk
Отправлено: 20 Марта, 2011 - 17:16:06
Post Id



Частый гость


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


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




так, наверное я все-таки плохо задал вопрос.

Итак, сначала
(таблица конечно по-другому называется, это просто для ясности)

В таблице Orders содержатся заказы клиентов (из таблицы Users)

То есть
дата заказа
сумма заказа
Айди клиента

В Users Хранятся клиенты
Айди
Имя
Координаты

На страницу выводится список заказов в формате
дата заказа
Сумма заказа
Имя клиента
Его координаты

Всё это реализуется запросом
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.  
  3.       SELECT * FROM `ORDERS` LEFT JOIN `user` ON `ORDERS`.`uid` = `user`.`id` WHERE `ORDERS`.`date`>'2010-01-01'
  4.  


Надо на страницу вывести еще один столбец: сколько всего этот клиент имеет заказов. То есть сколько строк в таблице Orders имеют айди этого клиента
(Добавление)
Vasiliya пишет:
duk пишет:
надо дополнить формируемую таблицу еще одной колонкой - количество заказов, которое всего сделал этот клиент
А в таблице ORDER в db у вас этот столбец есть?
Цитата:
SELECT * - это означает что выбираются все поля из таблицы


Нету.
Если бы он был, то вопроса бы не возникло
 
 Top
Champion Супермодератор
Отправлено: 20 Марта, 2011 - 17:30:05
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Дополнить, так дополнить.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2.      o.*,
  3.      u.*,
  4.      (
  5.           SELECT
  6.                count(*)
  7.           FROM user u2
  8.           WHERE u2.id = u.id
  9.      ) cnt
  10. FROM `ORDERS` o
  11. LEFT JOIN `user u` ON o.`uid` = u.`id`
  12. WHERE o.`date`>'2010-01-01


А вообще звездочками лучше не пользоваться, лучше явно перечислять. Во-первых, чтоб не читать лишние столбцы без необходимости (вдруг там большие-большие BLOB), а во-вторых, чтоб не возникало проблем при изменении структуры таблицы. Прийдется вспоминать, какими полями пользуется код, в место того, чтоб прочитать список этих полей после слова select.
 
 Top
vsll
Отправлено: 20 Марта, 2011 - 17:41:44
Post Id


Частый посетитель


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


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




Радость Да с телепатией у меня явно проблемы
 
 Top
duk
Отправлено: 20 Марта, 2011 - 18:51:51
Post Id



Частый гость


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


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




Champion, спасибо, то что нужно.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB