Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

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

 

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

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

тема: Выборка по одной записи для каждой категории.
 
 автор: Хулиган   (24.06.2006 в 00:52)   письмо автору
 
 

В базе есть поле category, которое принимает одинаковое значение для нескольких записей. Как составить запрос к базе, так, чтобы получить по одной записи для каждой из category?
Иными словами, получить список существующих категорий. Пока вижу только способ сортировать по этому полю и перебирать все записи, отбирая по одной для каждой вновь встретившейся категории. Но может есть способ лучше?
Спасибо.

   
 
 автор: hell_riser   (24.06.2006 в 01:44)   письмо автору
 
   для: Хулиган   (24.06.2006 в 00:52)
 

Если я вас правильно понял то вам поможет ключевое слово DISTINCT которое выбирает только различные значения поля, отбрасывая повторяющиеся.

$sql = 'SELECT DISTINCT category FROM $table';

   
 
 автор: Хулиган   (24.06.2006 в 02:54)   письмо автору
 
   для: hell_riser   (24.06.2006 в 01:44)
 

Да, это то что надо. Спасибо.

Пытаюсь сделать такой же запрос, но в комбинации с WHERE, чтобы получить категории отдела, но почему-то получаю failed :(

<?
    $link 
mysql_connect("localhost""root""") or die ("Could not connect");
    
mysql_select_db ("BASE") or die ("Could not select database");
    
//это первый запрос на список отделов - проходит нормально
    
$sql_dep "SELECT DISTINCT DEPARTMENT FROM TABLE1";
    
$result_dep mysql_query ($sql_dep) or die ("department query failed");
    while (
$cell mysql_fetch_array($result_dep)){ ?>
          <TR><TD class=leftnav id=toplight100
               style="color: #515151; background-color: #00fff"
               onclick="ShowSubmenu('menu_100', 'toplight100')">
               <? print htmlspecialchars($cell[0]) ?></TD>
          </TR>
          //это второй запрос на список категорий данного отдела.
          //тут неудача.
          <? $sql_cat "SELECT DISTINCT CAT_NAME FROM TABLE1 WHERE DEPARTMENT = ".$cell[0];
          
$result_cat mysql_query ($sql_cat) or die ("category query failed");
          
$cell mysql_fetch_array($result_cat);
          while (
$cell mysql_fetch_array($result_cat)){ ?>
                <TR>
                    <TD><DIV id=menu_100 style="DISPLAY: none">
                    <DIV class=submenu id=light101><A
                    href="http://www.ua6xhy.ru/index.php?category=101" target="_blank">
                    <? print htmlspecialchars($cell[2]) ?></A></DIV></DIV>
                    </TD>
                </TR>
              
          <? ?>
    <? 
?>


Можно ли комбинировать DISTINCT для одного поля с WHERE для другого? Если можно, почему запрос оканчивается неудачно?

   
 
 автор: hell_riser   (24.06.2006 в 03:16)   письмо автору
 
   для: Хулиган   (24.06.2006 в 02:54)
 

Вообще-то можно, а как выглядит ошибка напишите вместо

<?php
$result_cat 
mysql_query ($sql_cat) or die ("category query failed"); 
?>

так:

<?php
$result_cat 
mysql_query ($sql_cat);
if(!
$result_cat) exit("Ошибка:".mysql_error()) 
?>

   
 
 автор: Хулиган   (24.06.2006 в 11:54)   письмо автору
 
   для: hell_riser   (24.06.2006 в 03:16)
 

Синтаксическая ошибка: надо было с кавычками:


$sql_cat = "SELECT DISTINCT CAT_NAME FROM TABLE1 WHERE DEPARTMENT = '".$cell[0]."'";


Все нормально выбирается. Спасибо.

   
 
 автор: Хулиган   (24.06.2006 в 12:34)   письмо автору
 
   для: Хулиган   (24.06.2006 в 00:52)
 

Возник ещё один вопрос с DISTINCT: если делаю так
SELECT DISTINCT DEPARTMENT FROM TABLE1,
то в результате возвращаются только значения поля DEPARTMENT выбраных записей. а как можно получить все поля каждой из этих выбраных записей? Т.е. я получаю одномерый массив, а нужно многомерный.

   
 
 автор: Axxil   (24.06.2006 в 12:37)   письмо автору
 
   для: Хулиган   (24.06.2006 в 12:34)
 

Надо использовать группировку group by
SELECT * FROM TABLE1 GROUP BY department

   
 
 автор: cheops   (24.06.2006 в 12:37)   письмо автору
 
   для: Хулиган   (24.06.2006 в 12:34)
 

А вы их через запятую указывайте
SELECT DISTINCT DEPARTMENT, второе_поле, третье_поле, четвёртое_поле FROM TABLE1

   
 
 автор: Хулиган   (24.06.2006 в 12:44)   письмо автору
 
   для: cheops   (24.06.2006 в 12:37)
 

Оба способа работают, спасибо всем.

   
Rambler's Top100
вверх

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