|
|
|
| Подскажите, как вывести данные с таблицы, если ID нужных данных большое количество и содержатся в массиве? Без потери работоспособности, т.чтобы не отразилась на скорости...
я знаю только, так, что запрос базы вставить в цикл и перебирая ID, вытаскивать данные...но думаю, это сильно отразится на скорости... | |
|
|
|
|
|
|
|
для: xpom
(22.06.2011 в 23:45)
| | о каком количестве элементов массива идет речь?
Если о тысячи, то да - будет тормозит!
если о нескольких десятках - то foreach... | |
|
|
|
|
|
|
|
для: kireyev
(23.06.2011 в 09:09)
| | речь скорее о формировании запроса | |
|
|
|
|
|
|
|
для: xpom
(22.06.2011 в 23:45)
| | пример массива и пример запроса приведите | |
|
|
|
|
|
|
|
для: Valick
(23.06.2011 в 09:23)
| | да речь о формировании запроса..элементов сотни...посещение приличное и каждый всегда будет обращаться к странице с этим запросом...
вот примерчик:
$res = mysql_query("SELECT name FROM Table WHERE Cid =".$arr,$db);
|
и переменная $arr имеет массив значений Cid
можно конечно вытащить сразу все значения , а потом уже в цикле выбрать те данные которые имеют такой Cid, которые присутсвуют в массиве $arr, но это потянет большой трафик MySQL, каждый пользователь будет все вытягивать...как быть? | |
|
|
|
|
|
|
|
для: xpom
(23.06.2011 в 16:08)
| | конструкция IN() не подходит?
расскажите сущность Сid - что это и откуда берется
мне кажется просто Вы не там "свернули" :)
возможно тут надо JOIN использовать | |
|
|
|
|
|
|
|
для: Valick
(23.06.2011 в 16:26)
| | наверное конструкция IN() подходит...я с ней не знаком, не сталкивался...
значит функцией implode() преобразуем массив в строку и вставим в IN() спасибо большое, за помощь
Сid это номера категорий, они берутся с таблицы категории... | |
|
|
|
|
|
|
|
для: xpom
(23.06.2011 в 17:28)
| | Она позволяет сравнить число со множеством
$query = "SELECT name FROM Table
WHERE Cid IN(5, 12, 23, 126)";
$res = mysql_query($query,$db);
|
| |
|
|
|
|
|
|
|
для: cheops
(23.06.2011 в 17:51)
| | я так понимаю вот эти числа 5, 12, 23, 126 будут сравниваться с цислами в таблице? Если есть выводится те данные | |
|
|
|
|
|
|
|
для: xpom
(23.06.2011 в 17:58)
| | Совершенно верно.
PS В PHP имеется функция implode() при помощи которой очень удобно формировать такие IN-списки. | |
|
|
|
|
|
|
|
для: cheops
(23.06.2011 в 17:51)
| | она позволяет сравнить только число со множеством? А буквы и символы так можно какой нибудь функцией сравнить прям в запросе? | |
|
|
|
|
|
|
|
для: xpom
(25.06.2011 в 21:32)
| | Да, можно использовать строки, а не числа. Кроме того, вместо последовательности через запятую можно указать вложенный запрос, который извлекает данные из другой или этой же таблицы. | |
|
|
|
|
|
|
|
для: cheops
(25.06.2011 в 22:20)
| | а если эти слова, что нужно отыскать находятся в таблице через запятую? IN не сможет выполнить запрос? | |
|
|
|
|
|
|
|
для: xpom
(26.06.2011 в 14:47)
| | слова в одном поле через запятую - это "ошибка природы" и случается она от незнания принципов построения базы данных. Нужно срочно искать выход из сложившейся ситуации. | |
|
|
|
|
|
|
|
для: Valick
(26.06.2011 в 16:38)
| | да, увы...переделывать много нужно, если менять...в базе уже все так занесено...чему это грозит, если так оставить? | |
|
|
|
|
|
|
|
для: xpom
(26.06.2011 в 14:47)
| | >а если эти слова, что нужно отыскать находятся в таблице через запятую? IN не сможет
>выполнить запрос?
Вот среди этих значений уже вряд ли получится - придется сначала нормализовать данные, чтобы воспользоваться IN. | |
|
|
|
|
|
|
|
для: cheops
(26.06.2011 в 17:55)
| | ну это тогда только через CONCAT с like может быть получится...
это нужно для фильтра, если не учитывать это в запросе, просто больше трафика потянет..хотя нужно вытащить только список id | |
|
|
|
|
|
|
|
для: xpom
(23.06.2011 в 17:28)
| | Сid это номера категорий, они берутся с таблицы категории...
это в принципе понятно, меня интересует условие по которому они отбираются
может (а исходя из того что Вы написали, то скорее всего) лучше выбрать сразу одним запросом номера категорий и их имена?
примерно так
SELECT table1.name, table2.Cid FROM table2 JOIN table1 ON table1.id = table2.Cid WHERE условие
|
| |
|
|
|
|
|
|
|
для: Valick
(23.06.2011 в 18:13)
| | Valick, категории с id и именем находятся в одной таблице, точнее нужно выбрать продукт сходя из категорий в которых он есть...
Есть таблица категорий и одновременно подкатегорий, с полем id и parentid если имеется в строке parentid, то в этой категории есть подкатегории и нам нужно вытащить те строки категорий, id который совпадает с parentid включительно и саму строку с id. В свою очередь из вытащиных, тоже может имеется parentid, это значит еще вложения в подкатегорию, т.е. под-подкатегория и так все, что мы получим id категории нужно применить к таблице продуктов и вытащить те продукты совпадающие с выбранными категориями, т.е. где таблице продуктов в поле categoryID равняется id таблицы категорий....вот так,что то я кручу такой запрос и не получается так вытащить... | |
|
|
|
|
|
|
|
для: xpom
(24.06.2011 в 20:13)
| | все равно деревовидный список строить из категорий...придется разделять запросы...а одним запросом можно многоуровневый список категорий построить? | |
|
|
|
|
|
|
|
для: xpom
(24.06.2011 в 21:21)
| | может тут что поможет | |
|
|
|
|
|
|
|
для: Valick
(24.06.2011 в 21:42)
| | спасибо большое, посмотрим | |
|
|
|