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
Форумы портала PHP.SU :: Версия для печати :: Синтаксис селекта
Форумы портала PHP.SU » PHP » Программирование на PHP » Синтаксис селекта

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

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


На основе результатов запроса формируется страница со списком заказов
(дата, сумма, клиент, его контакт и так далее)
надо дополнить формируемую таблицу еще одной колонкой - количество заказов, которое всего сделал этот клиент
Что-то никак не соображу, как переписать селект?
2. vlom - 20 Марта, 2011 - 16:54:55 - перейти к сообщению
SELECT * - это означает что выбираются все поля из таблицы
в чем у вас проблема возникает???
3. duk - 20 Марта, 2011 - 16:56:28 - перейти к сообщению
хм, я вроде бы прямо написал:
++
надо дополнить формируемую таблицу еще одной колонкой - количество заказов, которое всего сделал этот клиент
++
4. OrmaJever - 20 Марта, 2011 - 17:04:13 - перейти к сообщению
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 пишет:
которое всего сделал этот клиент

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

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

В таблице 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 * - это означает что выбираются все поля из таблицы


Нету.
Если бы он был, то вопроса бы не возникло
7. Champion - 20 Марта, 2011 - 17:30:05 - перейти к сообщению
Дополнить, так дополнить.
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.
8. vsll - 20 Марта, 2011 - 17:41:44 - перейти к сообщению
Радость Да с телепатией у меня явно проблемы
9. duk - 20 Марта, 2011 - 18:51:51 - перейти к сообщению
Champion, спасибо, то что нужно.

 

Powered by ExBB FM 1.0 RC1