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

Форум MySQL

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

 

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

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

тема: Запрос + массив php
 
 автор: kostiaGt   (29.01.2011 в 19:32)   письмо автору
 
 

Здравствуйте.

Помогите советом плиз. У меня есть массив -

$arr[0] = 'value-0';
$arr[1] = 'value-1';
....
$arr[10] = 'value-10';

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

  Ответить  
 
 автор: cheops   (29.01.2011 в 19:56)   письмо автору
 
   для: kostiaGt   (29.01.2011 в 19:32)
 

>Мне в базе нужно найти только один из элементов массива.
А как он выделяется? И почему нельзя просто взять это конкретное значени и подставить в WHERE-условие? Какая структура таблицы.

  Ответить  
 
 автор: kostiaGt   (29.01.2011 в 20:23)   письмо автору
 
   для: cheops   (29.01.2011 в 19:56)
 

В таблице базы:

| id |    value   |
------------------
| 0 |  value-1 |
| 1 |  value-2 |
   .............
| 30  |  value-30 |


В массиве

$arr[0] = 'value-0';
$arr[1] = 'value-1';
....
$arr[10] = 'value-10';


Мне нужно найти один элемент из базы который соответствует одному элементу массива
например: мне нужно проверить есть ли значение value-2 в базе и если есть - вывести это значение.


Я делаю так:

foreach ($arr as $val) {
 $row = mysql_query("SELECT * FROM `my_table` WHERE 'id' = '$val' LIMIT 1");
 $res = mysql_fetch_row($row);
 if (isset($res['id'])) {
    return $res; 
 }
 ...
}


но, это, как мне кажеться, неправильно.

Я пытаюсь сделать что-то вроде:


$row = mysql_query("SELECT * FROM `my_table` WHERE 'id' IN ('".implode(',', $arr)."')  "); 

т.е получается запрос

SELECT * FROM `my_table` WHERE `id` IN ('value-1', 'value-2', ...'value-10')


но, если в таблице есть два или больше совпадений, вернется список, а мне нужен
только первое найденное значение из массива

  Ответить  
 
 автор: Trianon   (29.01.2011 в 20:33)   письмо автору
 
   для: kostiaGt   (29.01.2011 в 20:23)
 

если mysql_fetch_... в цикл не ставить, то Вы и получите только первое значение.
Более того, учитывая что в запросе у Вас стоит LIMIT 1 , более одного значения запрос не вернет.
Единственное что у Вас не айс - это поиск по полю id , а не по полю value.
Но это нетрудно переделать.

  Ответить  
 
 автор: kostiaGt   (29.01.2011 в 20:40)   письмо автору
 
   для: Trianon   (29.01.2011 в 20:33)
 

на счет поиска по id - это я ступил не правильное поле написал. нужно конечно искать по полю value. но, суть вопроса это не меняет.
я использую цикл, для перебора массива, а не для перебора списка данных из базы.
я хочу не вызывать десяток раз функцию mysql_query для вывода одной строки, а придумать один запрос, который бы искал одно поле из
списка значений массива

  Ответить  
 
 автор: cheops   (29.01.2011 в 20:38)   письмо автору
 
   для: kostiaGt   (29.01.2011 в 20:23)
 

Попробуйте так сделать
<?php
  $query 
"SELECT * FROM `my_table` WHERE 'id' = '$arr[1]' LIMIT 1"
  
$row mysql_query($query);
  
$res mysql_fetch_row($row);
  ...
?>

Или это не совсем то, что вам нужно?

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

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