67 / 67 / 6
Регистрация: 26.03.2010
Сообщений: 546
1

Как правильно строить запрос

05.08.2010, 22:57. Показов 1289. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Стал строить запрос в БД. Переставлял местами, переставлял... Чет допереть не могу...
PHP
1
$object=mysql_query("SELECT objects.* FROM objects, slots WHERE objects.user='".$stat['user']."' AND slots.id=".$stat['id']."  AND objects.komis=0 AND objects.sclad=0 AND objects.id NOT IN (slots.1,slots.2,slots.3,slots.4,slots.5,slots.6,slots.7,slots.8,slots.9,slots.10,slots.11,slots.12,slots.13,slots.14,slots.15,slots.16,slots.17,slots.18,slots.19,slots.20,slots.21,slots.22) AND objects.bank=0 AND objects.bank=2 ORDER BY time DESC");
Ключевое тут последнее
PHP
1
AND objects.bank=0 AND objects.bank=2
Если ставлю вместо AND OR то выдает то что нужно но по несколько раз. Если оставляю как есть то вообще не показывает...
Как правильно построить подскажите пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2010, 22:57
Ответы с готовыми решениями:

Как в sql запрос вставить еще один запрос правильно?
Есть длинный запрос, в котором можете даже не разбираться если не хотите, но выдает он следующее:...

Запрос INSERT INTO как построить запрос правильно?
Народ помогите пожалуйста сделать запрос правильно. Имеется таблица users в ней имеется данные для...

как правильно написать запрос
в базе данных есть таблица `ID`, `REGION_ID`, `LID`, `NAME`, `SHORT_NAME` она уже заполнена...

Как правильно отправлять запрос
Правильно ли я расставил кавычки ? Все по разному ставят кавычки, хотелось бы узнать как по книжке...

9
1574 / 645 / 79
Регистрация: 24.02.2009
Сообщений: 9,268
05.08.2010, 23:32 2
попробуйте мини-условия в одном большом условии занести в скобки
1
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
06.08.2010, 00:40 3
acupation, покажите как выводите.
P.S. зачем вытаскивать лишние данные из таблицы? Некоторые Вам и так известны( Вы их в условии используете ). И еще, если мне не изменяет память, то после FROM нужно указывать таблицу( -ы ), поля которой( -ых ) указаны после SELECT. Другими словами, если Вы вытаскиваете из таблицы
Цитата Сообщение от acupation Посмотреть сообщение
objects.*
то, после FROM достаточно написать только
Цитата Сообщение от acupation Посмотреть сообщение
objects
.
Могу ошибиться.
0
67 / 67 / 6
Регистрация: 26.03.2010
Сообщений: 546
06.08.2010, 00:58  [ТС] 4
Полностью код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$object=mysql_query("SELECT objects.* FROM objects, slots WHERE objects.user='".$stat['user']."' AND slots.id=".$stat['id']."  AND objects.komis=0 AND objects.sclad=0 AND objects.id NOT IN (slots.1,slots.2,slots.3,slots.4,slots.5,slots.6,slots.7,slots.8,slots.9,slots.10,slots.11,slots.12,slots.13,slots.14,slots.15,slots.16,slots.17,slots.18,slots.19,slots.20,slots.21,slots.22) AND objects.bank=0 OR objects.bank=2 ORDER BY time DESC");
 
###НАЧАЛО ЦИКЛА
for($i=0; $i<mysql_num_rows($object); $i++) {
$objects=mysql_fetch_array($object);
$obj_inf=explode("|",$objects['inf']);
$iteminfo=mysql_fetch_array(mysql_query("SELECT title FROM items WHERE name='".$objects['name']."' LIMIT 1"));
 
 
echo"
<tr>
<td>
 
<table width=100% cellspacing=0 cellpadding=3 border=1 bordercolor=CCCCCC bgcolor=EBEDEC>
<tr";
 
if ($objects[bank]) echo" bgcolor='DDDDDD'";
 
echo">
<td width=33% align=center><b>$iteminfo[title]</b><br><small>Долговечность:".$obj_inf['6']." [".$obj_inf['7']."]</small><br><small>".$min_kol."</small></td>
<td width=34% align=center><img src='../img/items/".$obj_inf['0'].".gif'></td>
<td width=33% align=center>";
 
 
if ($objects[bank]){
echo"<a href='bank.php?set=edit&out=".$obj_inf['0']."&tmp=$objects[id]'>Изъять из ячейки</a><br>";
echo"<small><i>(Находится в ячейке)</i></small>";}
 
else echo"<a href='bank.php?set=edit&in=".$obj_inf['0']."&tmp=$objects[id]'>Положить в ячейку</a><br>
<small><i>(Находится в рюкзаке)</i></small>";
 
echo"</td>
</tr>
</table>
 
 
</td>
</tr>
";
 
 
}
###КОНЕЦ ЦИКЛА
 
 
if ($i==0) echo"<tr><td align=center><i>Рюкзак пуст!</i></td></tr>";
0
Благотворец
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
06.08.2010, 01:13 5
как было сказано выше скобки поставьте

SQL
1
(objects.bank=0 OR objects.bank=2)
1
67 / 67 / 6
Регистрация: 26.03.2010
Сообщений: 546
06.08.2010, 01:13  [ТС] 6
Вот так вот выводит при нынешнем коде. Если без OR objects.bank=2 то выводит все норм, по базе, все эелементы по одному... Почему-то проблема в OR.

arvitaly, +100500)) Спасибо))))) Решено))
Миниатюры
Как правильно строить запрос  
0
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
06.08.2010, 01:15 7
Что первое бросилось в глаза так это:
Цитата Сообщение от acupation Посмотреть сообщение
for($i=0; $i<mysql_num_rows($object); $i++) {
Вместо этого цикла используйте
PHP
1
2
3
4
5
6
7
<?php
...
while ( $objects=mysql_fetch_assoc($object) ) {
...
}
...
?>
Во-вторых, если не хотите использовать mysql_fetch_assoc(), то приписывайте флаги к mysql_fetch_array(). Флагами могут быть:
MYSQL_NUM - возвращает индексный массив;
MYSQL_ASSOC - возвращает ассоциативный массив ( аналогично вызову mysql_fetch_assoc() );
MYSQL_BOTH - возвращает оба массива. Это значение по умолчанию для mysql_fetch_array(). Как Вы понимаете, если возвращается оба массива, то и памяти должно заниматься под эти 2 массива.
Я вижу, Вы используете только ассоциативный массив. Зачем Вам индексный?
Внесите изменения, которые я написал выше и отпишитесь о результате.

Цитата Сообщение от acupation Посмотреть сообщение
objects.bank=0 AND objects.bank=2
Одно и тоже поле не может быть равно разным значениям. Вы пытаетесь вытащить запись из таблицы в которой поле `bank` должно быть равно и 0 и 2
1
67 / 67 / 6
Регистрация: 26.03.2010
Сообщений: 546
06.08.2010, 01:19  [ТС] 8
Работает так же идеально.
А если не найдены значения с такими условиями? До этого я писал
PHP
1
if ($i==0) {...}
а теперь?
0
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
06.08.2010, 01:35 9
Цитата Сообщение от acupation Посмотреть сообщение
А если не найдены значения с такими условиями?
А каким образом $i относится к возвращаемым значениям? При первом пробеге цикла переменная $i будет равна 0. Не пойму как это Вам помогало определить найдены значения или нет.
Теперь, если Вам нужно знать количество вернувшихся строк, используйте:
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
...
if ( mysql_num_rows( $query ) > 0 ) {
//Цикл while(){}
...
}
else {
//Что-то другое
...
}
?>
1
67 / 67 / 6
Регистрация: 26.03.2010
Сообщений: 546
06.08.2010, 01:39  [ТС] 10
Спасибо.
Цитата Сообщение от romchiksoad Посмотреть сообщение
При первом пробеге цикла переменная $i будет равна 0. Не пойму как это Вам помогало определить найдены значения или нет.
До этого как-то работало)) воть))
0
06.08.2010, 01:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.08.2010, 01:39
Помогаю со студенческими работами здесь

Как правильно составить запрос в запросе?
в таблице есть строки с id: id = 1 id = 2 id = 3 id = 4 id = 5 Как сделать, что бы выборка...

Как правильно составить такой запрос?
2 таблицы: group - категория товаров с полями id, name_group biggroup - подкатегории товаров с...

Как правильно составить запрос с LIMIT?
Здравствуйте. Хочу выбрать 10 пользователей из базы, какие 10 - зависит от страницы, на которой я...

Как правильно сделать запрос в базу?
одна бд, в ней две таблицы: 1. монтаж (id, cat,name,price,desc) пример (1, 1, name, 4400,...

Как правильно поставить запрос мускулу?
Есть база данных соощений, которые группируются в темы. К примеру text | tema | res пар |...

SUM SQL запрос, как правильно?
Здравствуйте. Помогите пожалуйста правильно составить SQL запрос. Есть таблица TABLE и поля user,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru