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

Форум MySQL

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

 

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

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

тема: Как удалить из массива повторяющиеся значения?
 
 автор: Mefisto84   (23.05.2006 в 16:27)   письмо автору
 
 

Здравствуйте! У меня такой вопрос: как удалить из массива повторяющиеся значения? Ну вот к примеру есть массив со значениями: 12233345556777, а надо получить вот такой 1234567. Как это можно сделать? Массив у меня формируется из запроса:

$sql2="SELECT id_catalog FROM product WHERE id_product='".$id['id']."'";
$s2=mysql_query($sql2);
$name=mysql_fetch_array($s2);

Вот этот вот массив $name и нужно обработать.
Заранее благодарен.

   
 
 автор: Trianon   (23.05.2006 в 16:36)   письмо автору
 
   для: Mefisto84   (23.05.2006 в 16:27)
 

SELECT DISTINCT id_catalog FROM ...

   
 
 автор: Mefisto84   (23.05.2006 в 17:49)   письмо автору
 
   для: Trianon   (23.05.2006 в 16:36)
 

Увы это я пробовал, ничего не получается. А дело все в том что запрос работает в цикле, и массив формируется не от одного запроса, а от n-го количетсва запросов. Вот именно по этому дистинкт и не работает, как я понял. Т.к. в этом селекте выбирается сторого одна запись и нет тут повторений. Или я ошибаюсь?

   
 
 автор: Trianon   (23.05.2006 в 18:07)   письмо автору
 
   для: Mefisto84   (23.05.2006 в 17:49)
 

В таком случае (если однотипные запросы Вы производите в цикле) , вероятно, работа с БД у Вас реализована неоптимально.
Можно конечно сделать как-то так:
<?
$arr 
= array(); .. массив под результаты
for(......) // это цикл по запросам
{
   
$sql2="SELECT id_catalog FROM product WHERE id_product='".$id['id']."'"
   
$s2=mysql_query($sql2); 
   while(
$row=mysql_fetch_row($s2))
        
$arr[$row[0]] = 1// добавляем результаты как ключи массива
}

foreach(
$arr as $id_catalog => $one
     echo 
$id_catalog;
?>

но правильнее, на мой взгляд,устранить цикл запросов.

   
 
 автор: Mefisto84   (23.05.2006 в 18:34)   письмо автору
 
   для: Trianon   (23.05.2006 в 18:07)
 

Спасибо, попробую. Но я же конечно только за то как правильнее, только видимо не умею :-) если подскажете то я только за! Вот код полностью:

$sql1="SELECT DISTINCT id FROM image";
$s1=mysql_query($sql1);
echo "<table border=\"1\" width=\"100%\" align=\"center\" cellpadding=\"3\" cellspacing=\"1\" bordercolordark=\"white\" bordercolorlight=\"black\">";
echo "<tr align=\"center\" bgcolor=\"gray\"><td><span class=\"tt\">Название каталога</span></td><td><span class=\"tt\">Описание</span></td></tr>";
 while($id=mysql_fetch_array($s1))
      {
       $sql2="SELECT id_catalog FROM product WHERE id_product='".$id['id']."'";
       $s2=mysql_query($sql2);
       $name=mysql_fetch_array($s2);
       $sql5="SELECT *FROM catalog WHERE id_catalog='".$name['id_catalog']."'";
       $s5=mysql_query($sql5);
       $na=mysql_fetch_array($s5);
       echo "<tr>";
       echo "<td align=\"center\"><span class=\"text\"><a href=\"modules.php?name=Gallery&id_catalog=".$na['id_catalog']."\">".$na['nam']."</a></span></td><td>".$na['description']."</td>";
       echo "</tr>";
      }
echo "</table>";

Значит в первом запросе происходит выбор id без повторений из таблицы image.
Во втором запросе выбирается id_catalog из таблицы product, по id выбранным из таблицы image. И вот тут то и начинается проблема, а именно массив $name. ну а дальше вы знаете.
Уже потом по выбранным id_catalog ведется выбор всего из табоицы catalog. Вот собственно о чем я и говорил, нужно что бы второй запрос выбирал без повторений, как это лучше сделать, если в цикле это плохо.

   
 
 автор: Trianon   (23.05.2006 в 19:04)   письмо автору
 
   для: Mefisto84   (23.05.2006 в 18:34)
 


SELECT DISTINCT catalog.id_catalog as id, catalog.nam as nam, catalog.description as descr 
FROM image 
JOIN product ON image.id = product.id_product
JOIN catalog ON product.id_catalog = catalog.id_catalog

   
 
 автор: Mefisto84   (23.05.2006 в 21:18)   письмо автору
 
   для: Trianon   (23.05.2006 в 19:04)
 

Попробовал :-( не работает. Вставил в phpmyadmin пишет :

You have an error in your SQL syntax near 'ON image.id = product.id_product JOIN catalog ON product.id_catalog = catalog.id' at line 1

Таблицы у меня не связанные, если это имеет значение.

   
 
 автор: Евгений Петров   (23.05.2006 в 22:28)   письмо автору
 
   для: Mefisto84   (23.05.2006 в 21:18)
 

А так?
SELECT id_catalog FROM product WHERE id_product = '".$id['id']."' GROUP BY id_catalog

   
 
 автор: Mefisto84   (24.05.2006 в 08:12)   письмо автору
 
   для: Евгений Петров   (23.05.2006 в 22:28)
 

ну я же говорил. Группировка тут не поможет, и выбор без повторений тоже! Там запрос работает в цикле, то есть каждый раз извлекает по одной записи, т.е. группировать нечего, проще говоря.

   
 
 автор: Trianon   (24.05.2006 в 09:57)   письмо автору
 
   для: Mefisto84   (23.05.2006 в 21:18)
 

Где-то Вы ошиблись, значит. У меня этот запрос (в точности скопированный из форума в phpMyAdmin через буфер) нормально выдает результат.

   
 
 автор: Mefisto84   (24.05.2006 в 11:01)   письмо автору
 
   для: Trianon   (24.05.2006 в 09:57)
 

Ну прям фантастика какая-то. Я тоже просто скопировал запрос в майадмин и все. Еще раз взял скопировал, нет, все равно пишет ту же самую ошибку. Странно. И тот код который вы мне написали на удаление из массива повторяющихся значений чего-то у меня не работает. Выводит мне лишь один id_catalog и все. А должен вывести 3 штуки. Может я его не туда пихаю? В какую часть кода его нужно всунуть?
Спасибо.

   
 
 автор: Trianon   (24.05.2006 в 11:17)   письмо автору
 
   для: Mefisto84   (24.05.2006 в 11:01)
 

А MySQL-сервер у Вас какой версии?

   
 
 автор: Mefisto84   (24.05.2006 в 14:16)   письмо автору
 
   для: Trianon   (24.05.2006 в 11:17)
 

Это можно посмотреть при помощи phpinfo()?
Вот что я там нашел Client API version 3.23.49 . Это то? Или нет?

   
 
 автор: Trianon   (24.05.2006 в 14:20)   письмо автору
 
   для: Mefisto84   (24.05.2006 в 14:16)
 

Нет, не клиента, а сервера.

SELECT VERSION( ) ;

phpMyAdmin пишет её на начальной странице.

   
 
 автор: Mefisto84   (24.05.2006 в 18:19)   письмо автору
 
   для: Trianon   (24.05.2006 в 14:20)
 

а все понятно, увидел на первой странице админа MySQL 3.23.53-max.

   
 
 автор: Mefisto84   (24.05.2006 в 19:44)   письмо автору
 
   для: Mefisto84   (24.05.2006 в 18:19)
 

Все наконец-то разобрался, там к Вашему коду, нужно было добавить еще немного, и сейчас все работает, вот так:

while($row=mysql_fetch_row($s2)) 
         {
        $name[$row[0]] = 1; 
         }
       foreach($name as $id_catalog => $one) 
                $id_catalog;

      }
   reset($name);
   while(list($key, $val) = each($name))
   {
    //echo ("$key = $val<br>");
$sql5="SELECT *FROM catalog WHERE id_catalog=$key";

Спасибо за помощь.

   
 
 автор: Trianon   (24.05.2006 в 20:16)   письмо автору
 
   для: Mefisto84   (24.05.2006 в 18:19)
 

>3.23.53-max.
Редкое старье однако.

   
 
 автор: Mefisto84   (24.05.2006 в 20:36)   письмо автору
 
   для: Trianon   (24.05.2006 в 20:16)
 

Да? А я и не знал. А что вы посоветуете? Какую версию?

   
 
 автор: Trianon   (24.05.2006 в 20:44)   письмо автору
 
   для: Mefisto84   (24.05.2006 в 20:36)
 

http://dev.mysql.com/downloads/

   
 
 автор: Сквиртел13   (25.05.2006 в 14:25)   письмо автору
41.8 Кб
 
   для: Trianon   (23.05.2006 в 16:36)
 

Привет!

Извените что отвечаю Вам по чужому сообщению, но тему вчерашнюю закрыли. Вы просили вложить вчера файл php.ini вкладываю.

с уважением Сквиртел13.

   
Rambler's Top100
вверх

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