Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 210
от 24.01.2007, 13:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 397, Экспертов: 50
В номере:Вопросов: 2, Ответов: 11


Вопрос № 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 не идет ?
Отправлен: 18.01.2007, 18:21
Вопрос задал: Третьяков Сергей Данилович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Третьяков Сергей Данилович!
Этот запрос выполняется как

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
Это же касается и других агрегатных функций

---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 18.01.2007, 18:43

Отвечает: 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.41 beta от 19.01.2007
Яндекс Rambler's Top100

В избранное