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

Форум MySQL

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

 

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

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

тема: Вывести данные с массивом ID
 
 автор: xpom   (22.06.2011 в 23:45)   письмо автору
 
 

Подскажите, как вывести данные с таблицы, если ID нужных данных большое количество и содержатся в массиве? Без потери работоспособности, т.чтобы не отразилась на скорости...
я знаю только, так, что запрос базы вставить в цикл и перебирая ID, вытаскивать данные...но думаю, это сильно отразится на скорости...

  Ответить  
 
 автор: kireyev   (23.06.2011 в 09:09)   письмо автору
 
   для: xpom   (22.06.2011 в 23:45)
 

о каком количестве элементов массива идет речь?
Если о тысячи, то да - будет тормозит!
если о нескольких десятках - то foreach...

  Ответить  
 
 автор: Valick   (23.06.2011 в 09:22)   письмо автору
 
   для: kireyev   (23.06.2011 в 09:09)
 

речь скорее о формировании запроса

  Ответить  
 
 автор: Valick   (23.06.2011 в 09:23)   письмо автору
 
   для: xpom   (22.06.2011 в 23:45)
 

пример массива и пример запроса приведите

  Ответить  
 
 автор: xpom   (23.06.2011 в 16:08)   письмо автору
 
   для: Valick   (23.06.2011 в 09:23)
 

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


$res = mysql_query("SELECT name FROM Table WHERE Cid =".$arr,$db);

и переменная $arr имеет массив значений Cid

можно конечно вытащить сразу все значения , а потом уже в цикле выбрать те данные которые имеют такой Cid, которые присутсвуют в массиве $arr, но это потянет большой трафик MySQL, каждый пользователь будет все вытягивать...как быть?

  Ответить  
 
 автор: Valick   (23.06.2011 в 16:26)   письмо автору
 
   для: xpom   (23.06.2011 в 16:08)
 

конструкция IN() не подходит?
расскажите сущность Сid - что это и откуда берется
мне кажется просто Вы не там "свернули" :)
возможно тут надо JOIN использовать

  Ответить  
 
 автор: xpom   (23.06.2011 в 17:28)   письмо автору
 
   для: Valick   (23.06.2011 в 16:26)
 

наверное конструкция IN() подходит...я с ней не знаком, не сталкивался...
значит функцией implode() преобразуем массив в строку и вставим в IN() спасибо большое, за помощь

Сid это номера категорий, они берутся с таблицы категории...

  Ответить  
 
 автор: cheops   (23.06.2011 в 17:51)   письмо автору
 
   для: xpom   (23.06.2011 в 17:28)
 

Она позволяет сравнить число со множеством
$query = "SELECT name FROM Table
WHERE Cid IN(5, 12, 23, 126)";
$res = mysql_query($query,$db);

  Ответить  
 
 автор: xpom   (23.06.2011 в 17:58)   письмо автору
 
   для: cheops   (23.06.2011 в 17:51)
 

я так понимаю вот эти числа 5, 12, 23, 126 будут сравниваться с цислами в таблице? Если есть выводится те данные

  Ответить  
 
 автор: cheops   (23.06.2011 в 18:13)   письмо автору
 
   для: xpom   (23.06.2011 в 17:58)
 

Совершенно верно.

PS В PHP имеется функция implode() при помощи которой очень удобно формировать такие IN-списки.

  Ответить  
 
 автор: xpom   (25.06.2011 в 21:32)   письмо автору
 
   для: cheops   (23.06.2011 в 17:51)
 

она позволяет сравнить только число со множеством? А буквы и символы так можно какой нибудь функцией сравнить прям в запросе?

  Ответить  
 
 автор: cheops   (25.06.2011 в 22:20)   письмо автору
 
   для: xpom   (25.06.2011 в 21:32)
 

Да, можно использовать строки, а не числа. Кроме того, вместо последовательности через запятую можно указать вложенный запрос, который извлекает данные из другой или этой же таблицы.

  Ответить  
 
 автор: xpom   (26.06.2011 в 14:47)   письмо автору
 
   для: cheops   (25.06.2011 в 22:20)
 

а если эти слова, что нужно отыскать находятся в таблице через запятую? IN не сможет выполнить запрос?

  Ответить  
 
 автор: Valick   (26.06.2011 в 16:38)   письмо автору
 
   для: xpom   (26.06.2011 в 14:47)
 

слова в одном поле через запятую - это "ошибка природы" и случается она от незнания принципов построения базы данных. Нужно срочно искать выход из сложившейся ситуации.

  Ответить  
 
 автор: xpom   (26.06.2011 в 17:37)   письмо автору
 
   для: Valick   (26.06.2011 в 16:38)
 

да, увы...переделывать много нужно, если менять...в базе уже все так занесено...чему это грозит, если так оставить?

  Ответить  
 
 автор: cheops   (26.06.2011 в 17:55)   письмо автору
 
   для: xpom   (26.06.2011 в 14:47)
 

>а если эти слова, что нужно отыскать находятся в таблице через запятую? IN не сможет
>выполнить запрос?
Вот среди этих значений уже вряд ли получится - придется сначала нормализовать данные, чтобы воспользоваться IN.

  Ответить  
 
 автор: xpom   (26.06.2011 в 19:05)   письмо автору
 
   для: cheops   (26.06.2011 в 17:55)
 

ну это тогда только через CONCAT с like может быть получится...
это нужно для фильтра, если не учитывать это в запросе, просто больше трафика потянет..хотя нужно вытащить только список id

  Ответить  
 
 автор: Valick   (23.06.2011 в 18:13)   письмо автору
 
   для: xpom   (23.06.2011 в 17:28)
 

Сid это номера категорий, они берутся с таблицы категории...
это в принципе понятно, меня интересует условие по которому они отбираются
может (а исходя из того что Вы написали, то скорее всего) лучше выбрать сразу одним запросом номера категорий и их имена?
примерно так
SELECT table1.name, table2.Cid FROM table2 JOIN table1 ON table1.id = table2.Cid WHERE условие

  Ответить  
 
 автор: xpom   (24.06.2011 в 20:13)   письмо автору
 
   для: Valick   (23.06.2011 в 18:13)
 

Valick, категории с id и именем находятся в одной таблице, точнее нужно выбрать продукт сходя из категорий в которых он есть...
Есть таблица категорий и одновременно подкатегорий, с полем id и parentid если имеется в строке parentid, то в этой категории есть подкатегории и нам нужно вытащить те строки категорий, id который совпадает с parentid включительно и саму строку с id. В свою очередь из вытащиных, тоже может имеется parentid, это значит еще вложения в подкатегорию, т.е. под-подкатегория и так все, что мы получим id категории нужно применить к таблице продуктов и вытащить те продукты совпадающие с выбранными категориями, т.е. где таблице продуктов в поле categoryID равняется id таблицы категорий....вот так,что то я кручу такой запрос и не получается так вытащить...

  Ответить  
 
 автор: xpom   (24.06.2011 в 21:21)   письмо автору
 
   для: xpom   (24.06.2011 в 20:13)
 

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

  Ответить  
 
 автор: Valick   (24.06.2011 в 21:42)   письмо автору
 
   для: xpom   (24.06.2011 в 21:21)
 

может тут что поможет

  Ответить  
 
 автор: xpom   (24.06.2011 в 22:24)   письмо автору
 
   для: Valick   (24.06.2011 в 21:42)
 

спасибо большое, посмотрим

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

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