Вопрос № 71560: здравствуйте! вопрос SQL SERVER
где ошибка в скрипте :
SELECT maker
FROM Product pd JOIN PC on pd.model = PC.model
WHERE type = 'printer' OR ram IN
(select MIN(ram) from PC)
если в таком виде то всё нормально, а заменив OR ...Вопрос № 71644: Уважаемые эксперты, вопрос по MySQL и PHP
У меня есть запрос к базе данных:
$result = $db->query("SELECT id,autor,date,title, FROM post WHERE category LIKE '%$cat%' ORDER BY date DESC");
но мне нужно регулярное выра...
Вопрос № 71.560
здравствуйте! вопрос SQL SERVER
где ошибка в скрипте :
SELECT maker
FROM Product pd JOIN PC on pd.model = PC.model
WHERE type = 'printer' OR ram IN
(select MIN(ram) from PC)
если в таком виде то всё нормально, а заменив OR на AND не идет ?
Отвечает: Архангельский Андрей Германович
Здравствуйте, Третьяков Сергей Данилович!
Этот запрос выполняется как
SELECT maker
FROM Product pd JOIN PC on pd.model = PC.model
WHERE type = 'printer'
На самом деле должно быть:
SELECT maker
FROM Product pd JOIN PC on pd.model = PC.model
WHERE type = 'printer'
OR mRam IN (select MIN(ram) as mRam from PC)
Дело в том, что при использование агрегата MIN() имя поля становится неопределенным и его нужно явно определить через as
Это же касается и других агрегатных функций
--------- Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Отвечает: Grigory
Здравствуйте, Третьяков Сергей Данилович!
ИМХО, когда Вы заменяете в вашем запросе OR на AND, Вы просите показать вам принтеры у которых есть RAM - видимо таких принтеров в вашей БД нет, потому запрос и не идёт. Иными словами, Вам надо написать что-то типа (вместо type='pc' подставьте тот type,который у вас соответствует компьютеру):
SELECT maker
FROM Product pd JOIN PC on pd.model = PC.model
WHERE (type = 'printer') OR (type='pc' AND ram in (select MIN(ram) from PC))
Удачи!
Ответ отправил: Grigory (статус: 10-ый класс)
Ответ отправлен: 18.01.2007, 19:05 Оценка за ответ: 5 Комментарий оценки: С!П!А!С!И!Б!О!
Отвечает: Vvvv
Здравствуйте, Третьяков Сергей Данилович!
Ну ram IN (select MIN(ram) from PC) в данном случае бесмысленна, так как select MIN(ram) from PC вернет одно минимальнок значение для всей таблицы, вопрос как будет работать запрос если минимальное значение ram = 1, а записи с type = 'printer' имеют диапазон ram от 2 до 4, при OR сработает первое условие a второе будет откинуто, при AND запрос вернет 0 записей, отсюда либо модифицировать подзапрос до вида ram IN (select MIN(ram) from PC WHERE type = 'printer'), ну или согласно требований, или следующая конструкция
WHERE type = 'printer' OR ram BETWEEN 2 AND 4, что то так...
Ответ отправил: Vvvv (статус: 1-ый класс)
Ответ отправлен: 19.01.2007, 17:01
Вопрос № 71.644
Уважаемые эксперты, вопрос по MySQL и PHP
У меня есть запрос к базе данных:
$result = $db->query("SELECT id,autor,date,title, FROM post WHERE category LIKE '%$cat%' ORDER BY date DESC");
но мне нужно регулярное выражение ‘%...%’ применить не к переменной $cat, а к значению поля ‘category’
нужно, чтобы запрос отобрал значения поля ‘category’, которое окруженное любыми символами, равнялось бы переменной $cat.
Помогите, пожалуйста, составить такой запрос.
Спасибо
Отправлен: 19.01.2007, 10:18
Вопрос задал: Sergey78 (статус: Посетитель)
Всего ответов: 8 Мини-форум вопроса >>> (сообщений: 6)
Отвечает: Архангельский Андрей Германович
Здравствуйте, Sergey78!
$result = $db->query("SELECT id,autor,date,title, FROM post WHERE category LIKE '%"+$cat%+"' ORDER BY date DESC");
--------- Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 19.01.2007, 10:29 Оценка за ответ: 4 Комментарий оценки: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0' at line 1
где ошибка?
Отвечает: Santana
Здравствуйте, Sergey78!
Ну оно так и будет работать. в конструкции category LIKE '%$cat%' переменная $cat заменяется значением ... допустим оно равно "Value" и получится category LIKE '%Value%'
Ответ отправил: Santana (статус: 9-ый класс)
Ответ отправлен: 19.01.2007, 10:47 Оценка за ответ: 3 Комментарий оценки: вы не поняли. мне нужно НАОБОРОТ чтобы Value было LIKE %category%
Отвечает: Heartwork
Здравствуйте, Sergey78! Возможно у вас простая орфографическая ошибка - лишняя запятая перед FROM. ... SELECT id, autor, date,title FROM post ... По крайней мере, в примере запроса у вас в этом месте точно неправильно... Хотя может, просто в наборе примера ошиблись...
--------- Вода - Это Огромная Дорога Среди Красоты
Ответ отправил: Heartwork (статус: 2-ой класс)
Ответ отправлен: 19.01.2007, 11:09 Оценка за ответ: 3 Комментарий оценки: Heartwork, это НЕ ВАЖНО. запрос рабочий (это опечатка)
Вы лучше прочитайте сам вопрос.
значение поля "category" должно входить в состав переменной $cat
Отвечает: Барков Илья Андреевич
Здравствуйте, Sergey78!
Не совсем понятен вопрос. Приведите пример.
Если я правильно понял, то запрос должен вернуть значение поля category с условием like '%$cat%' ?
тогда так:
SELECT caterogy FROM post WHERE category LIKE '%$cat%' ORDER BY date DESC
p/s у вас синтаксическая ошибка в запросе: после "title" запятой не надо . на всякий случай :)
Ответ отправил: Барков Илья Андреевич (статус: 7-ой класс)
Ответ отправлен: 19.01.2007, 14:54
Отвечает: LastSoul
Здравствуйте, Sergey78!
Попробуй те так:
SELECT id,autor,date,title FROM post WHERE '$cat' like '%'+category+'%' ORDER BY date DESC
по крайней мере в MS SQL это работает, проверено.
Ответ отправил: LastSoul (статус: Практикант)
Ответ отправлен: 19.01.2007, 16:36 Оценка за ответ: 4 Комментарий оценки: Спасибо, но сейчас запрос выбирает абсолютно ВСЕ значения поля 'category', не важно какой '$cat'
Отвечает: Игорь Елизаров
Здравствуйте, Sergey78!
Не совсем понятен вопрос.
например
category овощи
пиво
вобла
картошка
водка
если $cat = во
то должны выводиться записи
овощи
пиво
вобла
водка
то есть по фрагменту выводится список, содержащий указанный фрагмент текста
Обращаю еще раз ваше внимание, что и переменная и поле в этом случае текстовые.
Это вроде логично. А что Вы предполагали получить ?
Ответ отправил: Игорь Елизаров (статус: 9-ый класс)
Ответ отправлен: 19.01.2007, 18:07 Оценка за ответ: 4 Комментарий оценки: наоборот!!! category=во $cat будет равно: овощи пиво вобла водка
Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Sergey78!
Сделайте так:
SELECT id,autor,date,title, FROM post WHERE LOCATE($cat,`category`)>0 ORDER BY date DESC
Проверяется номер вхождения переменную $cat в `category`. Если номер больше 0, значит значение $cat входит в `category`.
//Добавлено 20.01.2007 в 13:00
SELECT id,autor,date,title, FROM post WHERE LOCATE(`category`,$cat)>0 ORDER BY date DESC
Проверяется номер вхождения `category` в переменную $cat. Если номер больше 0, значит значение поля `category` входит в $cat.
Ответ отправил: Устинов Сергей Евгеньевич (статус: Практикант)
Ответ отправлен: 19.01.2007, 19:27 Оценка за ответ: 4 Комментарий оценки: Увы, но работает НАОБОРОТ. Проверяется вхождение переменной $cat в `category`.
Отвечает: lupus campestris
Здравствуйте, Sergey78!
Не очень понятно, что Вам нужно. Если нужно просто выявить поля, названия которых соответствуют шаблону, то это можно сделать так:
mysql> show columns in db_name like '%$cat%';
названия полей будут в первом параметре Field:
mysql> show columns in test1 like '%b%';
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| b | varchar(5) | YES | MUL | NULL | |
+-------+------------+------+-----+---------+-------+
1 row in set (0.00 sec)
Вам, соответственно, нужно будет выполнить запрос вроде такого:
$result = $db->query("SHOW COLUMNS IN post LIKE '%$cat%'");
Удачи!
--------- «С кем тяжело молчать, с тем не о чем говорить» (Метерлинк)
Ответ отправила: lupus campestris (статус: Профессор) Россия, Москва Тел.: +79060429689 Организация: http://www.orange-business.ru WWW:http://lupus-campestris.blogspot.com/ ICQ: 193918889 ---- Ответ отправлен: 19.01.2007, 20:18