Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопросик по выводу уникальных значений
 
 автор: V1a8xerss87   (04.07.2009 в 12:45)   письмо автору
 
 

Здравствуйте.
Имеется следующий код:

$query_firm=mssql_query("SELECT id_firm,name FROM Firm") or die("error in goods  query");
$ratiss_num_goods=mssql_num_rows($query_firm);
if(mssql_num_rows($query_firm)>0) 
{
while($firms=mssql_fetch_row($query_firm))
{
echo $firms['2']."<br />";
}
}

Данный код выводит из базы все имеющиеся записи, id_firm не уникален, как и name. Я так понимаю, что с помощью

sql тут не получится вывести уникальные значения. Подскажите, как вывести только уникальные значения

name(вывести каждую фирму один раз).

  Ответить  
 
 автор: Ильдар   (04.07.2009 в 13:09)   письмо автору
 
   для: V1a8xerss87   (04.07.2009 в 12:45)
 

группированием по полю, что должно быть уникальным
<?
$query_firm
=mssql_query("SELECT id_firm,name FROM Firm GROUP BY name ") or die("error in goods  query");
?>

  Ответить  
 
 автор: V1a8xerss87   (04.07.2009 в 15:38)   письмо автору
 
   для: Ильдар   (04.07.2009 в 13:09)
 

хм...делаю вот такой запрос:

$query_Goods=mssql_query("SELECT id_city,id_firm,id_subgroup,name,publish FROM Price GROUP BY id_firm WHERE id_subgroup=".$id_subgroup." AND publish=1 AND id_city=48") or die("error in goods query");

Выдает следующие ошибки:
Warning: mssql_query() [function.mssql-query]: message: Incorrect syntax near the keyword 'WHERE'. (severity 15) in Z:\home\site.ru\www\script.php on line 647

Warning: mssql_query() [function.mssql-query]: Query failed in Z:\home\site.ru\www\script.php on line 647
error in goods query

Что я не так делаю?

  Ответить  
 
 автор: GeorgeIV   (04.07.2009 в 15:47)   письмо автору
 
   для: V1a8xerss87   (04.07.2009 в 15:38)
 

GROUP BY применяется при использовании агрегирующих функций в запросе

("SELECT DISTINCT id_firm,name FROM Firm") 

  Ответить  
 
 автор: V1a8xerss87   (04.07.2009 в 15:49)   письмо автору
 
   для: GeorgeIV   (04.07.2009 в 15:47)
 

А можно немного поподробней? Как сделать подругому?
---
Спасибо, попробую

  Ответить  
 
 автор: Trianon   (04.07.2009 в 15:55)   письмо автору
 
   для: GeorgeIV   (04.07.2009 в 15:47)
 

>GROUP BY применяется при использовании агрегирующих функций в запросе

Замечание верное, но адресовать имет смысл персонажу "Ильдар".

  Ответить  
 
 автор: Trianon   (04.07.2009 в 15:54)   письмо автору
 
   для: V1a8xerss87   (04.07.2009 в 12:45)
 

Вообще-то если в таблице Firm ни поле id_firm, ни поле name не является уникальным, это повод задуматься "а может ну её нахрен такую таблицу..."

  Ответить  
 
 автор: V1a8xerss87   (04.07.2009 в 16:33)   письмо автору
 
   для: Trianon   (04.07.2009 в 15:54)
 

Задумывались и уже давноооо :-D ))))) Не мы эту таблицу придумали, но приходитсО с ней работать :(
Проблема не решена. DISTINCT не помогает совсем: выводит только 1 запись из БД.

  Ответить  
 
 автор: Trianon   (04.07.2009 в 16:38)   письмо автору
 
   для: V1a8xerss87   (04.07.2009 в 16:33)
 

>DISTINCT не помогает совсем: выводит только 1 запись из БД.

Эт врядли.
В смысле, если у Вас там есть хотя бы две записи с разными полями, то дело не в DISTINCT.

  Ответить  
 
 автор: V1a8xerss87   (04.07.2009 в 17:04)   письмо автору
 
   для: Trianon   (04.07.2009 в 16:38)
 

А возможно ли все-таки использовать GROUP BY?
+ Какой синтаксис использование DISTINCT?
+ Возможно ли как то силами php без SQL выводить только одно значение?

  Ответить  
 
 автор: Trianon   (04.07.2009 в 17:10)   письмо автору
 
   для: V1a8xerss87   (04.07.2009 в 17:04)
 

+ Можно, но не нужно. Смысла нет.

+ DISTINCT ставится перед перед списком полей в SELECT. Это приводит к тому, что сервер исключает из отчета дубли строк.

+ Можно, но не нужно. Смысла нет.


Проблема,наверное, не [только] в том, как Вы формируете запрос, а в том, как Вы выводите его результат.

  Ответить  
 
 автор: V1a8xerss87   (04.07.2009 в 17:21)   письмо автору
 
   для: Trianon   (04.07.2009 в 17:10)
 

Ну собственно есть таблица с товарами, в которой содержится инфа о товарах и так же, идентификатор фирмы, производящий данный товар из другой таблицы. Я выбираю из таблицы c товарами все записи, где id_city=48, получаю идентификатор фирмы, через который уже из таблицы с фирмами получаю имя фирмы.
Вот сам код:

$query_Goods=mssql_query("SELECT DISTINCT id_city,id_firm FROM Price WHERE id_city=48") or die("error in goods query");
$num_goods=mssql_num_rows($query_Goods);
if(mssql_num_rows($query_Goods)>0)
{
while($Goods=mssql_fetch_row($query_Goods))
{
$q=mssql_query("SELECT id_firm,name FROM Firm WHERE id_firm=".$Goods[1]."");
$r=mssql_fetch_row($q);
echo $r['1']."<br />";
}
}

В итоге, без DISTINCT я получаю список имен фирм, но часть имен повторяется. С DISTINCT я получаю только первую запись из таблицы с фирмами.

  Ответить  
 
 автор: Trianon   (04.07.2009 в 17:35)   письмо автору
 
   для: V1a8xerss87   (04.07.2009 в 17:21)
 

1. уберите внутренний запрос - он не нужен. Либо выполните полный вывод результатов из него. А не только первую из строк.
2. расставьте отступы внутри составных операторов.
3. выведите оба поля запроса, а не только второе.
4. не надо писать $r['1'] при обращении к элементу 1. Надо писать $r[1]

  Ответить  
 
 автор: GeorgeIV   (04.07.2009 в 17:38)   письмо автору
 
   для: V1a8xerss87   (04.07.2009 в 17:21)
 

У меня еще вопрос по синтаксису, а на кой вы выбирвете поля, которые не используете: Id_city в первом запросе и id_firm во втором. DISTINCT имеет влияние на всю выборку, т.е на уникальность сочетания полей

  Ответить  
 
 автор: V1a8xerss87   (04.07.2009 в 18:01)   письмо автору
 
   для: GeorgeIV   (04.07.2009 в 17:38)
 

Все заработало. Все получилось. Всем спасибо. :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования