Cross-запрос

tony2001

TeaM PHPClub
Falc
ткни мне пальцем в связку, плз.
какая из этой таблица соответствует каким двум ?
 

Falc

Новичок
tony2001
Detal = таблице связке м-м: GradeID | ContainerID

Они отличаются только названиями полей смысл одинаковый.
 

FESt

Guest
Связка с другой таблицей - это сорта и тара--> склады.
1111 и 5555 тоже на складе. Но как бы на данный момент
это не имеет значения.

chira, спасибо!
это то что нужно! скорость 0.02 сек (4млн)
я тестировал: select * from detal where nam='5555' or vam='5555'
скорость 12 сек
Но это как бы половина кода. Нужна вторая часть поиска, по тем значения каторые мы вытащили! т.е. найти бутылку.
Этот новый код связать со старым. Возможно ли построить такой запрос? Может мне что-нибудь почитать?
 

chira

Новичок
чего-то не очень понятно про вторую часть
мож это?
Код:
select distinct d2.* from Detal d1, Detal d2 
where d1.vam='5555' 
 AND d1.nam=d2.nam
 AND d2.vam = '0111'
 

FESt

Guest
Это не совсем то. И 5555, 0111, 1234 - имеет общее назване -
пиво. При этом 1234 это основной номер поиска, т.е. если по нему искать, то получаем полную картину, Он находит самого себя, и двух других. По результату поиска знаем что это пиво, определённого сорта, оно разливается в банки и бутылки. Другими словами, это три родственника, которые должны гулять только втроём. Грубо говоря они все равны между собой, Но чётко, это равенство понимает только 1234.
Поиск по двум стобцам дал отличный результат, и туман начал рассеиваться. Но чтобы его полностью рассеять, нужно по результату поиска-1234 в колоне-nan, активировать ещё один поиск. Т.е. поиск в поиске? вложенный запрос? создание временной таблиц? дать команду базе, что бы она саму себя привела в исходный вид например:
+-------+-------+
| vam | nam |
+-------+-------+
| 0111 | 5555 |
| 1234 | 5555 |
| 5555 | 5555 |
| 5555 | 1234 |
+-------+-------+
чтобы оставить алгоритм первого запроса на поиск?
 

chira

Новичок
Код:
select distinct d2.* from Detal d1, Detal d2 
where d1.vam='5555' 
 AND (d1.nam=d2.nam
   OR d1.nam=d2.vam
   OR d1.vam=d2.nam)
 

clevel

Новичок
а почему при сравнение чисел мы все это в кавычки берем?
Теперь это модно?
 

FESt

Guest
chira, ещё раз - БОЛЬШОЕ СПАСИБО! Это то самое, что нужно.
Именно об этом я коряво спрашивал. Тема вопроса исчерпана. Но теперь что-то со скоростью - вроде индексировано всё что
можно и distinct тоже есть. Но на локале 15 сек.

-~{}~ 16.02.04 11:13:

Автор оригинала: Krisha
С этого нужно было начинать :)
Кстати, что начинать читать?
Я накачал иэ инета всё что можно, но классика - это:
Люк Велинг и Лора Томсон "Разработка Web-приложений с помощьюPHP и MySQL" Второе издание. Книга с CD. Всё с реальными примерами! А временами можно просто почитать. И случайно попался диск, но это для установки програмного обеспечения на два клика, "NuSphere Pro Advantage v2.3.1
 

Krisha

pain in the neck
Люк Велинг и Лора Томсон - имхо, фигня....

Читать:

Основы РБД - всё что найдешь
Поль Дюбуа - MySQL
Красную книгу - ПХП
 

FESt

Guest
Автор оригинала: Falc
FESt
>>Как сделать бы так, чтобы возвращались значения 1234, 0111, 5555 если искать по 5555 (т.к.
все значения равнозначны)

А что должно выдавать если искать по '6666' ???
Это лучше спросить у яндекса, возможно, что он пошлёт в эту тему. Но на самом деле вопрос непосредственно касается этой темы. Ведь 6 может легко превратиться в 9, и наоборот (если встать на голову). А если внимательно всмотреться, то она нарисована нулём и единицей - а это основа основ, и не только программирования. -- >Бред конечно, но что-то в нём есть.
 

chira

Новичок
Но теперь что-то со скоростью - вроде индексировано всё что
можно и distinct тоже есть. Но на локале 15 сек.
SQL серверам не очень нравятся выражения с OR обычно их заменяют на конструкцию c UNION ALL.
если используешь MySQL 4 , то перепиши SQL используя UNION ALL.
внешне SQL выглядет угрожающим, но работать должен быстрее.
 

FESt

Guest
Автор оригинала: chira
SQL серверам не очень нравятся выражения с OR обычно их заменяют на конструкцию c UNION ALL.
если используешь MySQL 4 , то перепиши SQL используя UNION ALL.
внешне SQL выглядет угрожающим, но работать должен быстрее.
даже вот так достаиочно:
========
select distinct d2.* from Detal d1, Detal d2
where d1.vam='5555'
AND d1.nam=d2.nam
========
скорость 0.7 сек.

СПАСИБО!
 

chira

Новичок
ещё, если у тебя пара значений (vam,nam) уникальна, то можно убрать distinct.
 
Сверху