Автор Тема: Join + union заявка от php  (Прочетена 6507 пъти)

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Join + union заявка от php
« -: Aug 10, 2008, 00:50 »
Здравейте,
Стигнах до следния казус и моля за малко акъл, защото моят не стига. Първо, опитът съм го направил на две системи:
1. Ubuntu 8.04 с apache 2.2.8, php 5.2.4 и mysql 5.0.51a
2. Някакъв shared hosting, където предполагам системата е някаква версия на CentOS с някакво apache 2.0 или 2.2 (незнайно защо му е пренаписано името), php 5.2.5 и mysql 5.0.51a
Задачата е следната - имаме таблица в базата, която съдържа новини, уроци и разни други подобни по структура данни. Всеки запис е на отделен ред. Ако някой разцъква Joomla 1.5, това е таблицата content. В тази таблица, освен другите данни, си въвеждаме новини, като за всяка новина може да имаме по 1 или по 2 записа. Когато новината е само на български или на английски, записът е 1, а когато я има и на двата езика - записите са 2. Целта на скрипта, който сме си написали е да покаже списък от тези новини, като когато новината е на един език, да се покаже само една клетка на реда в страницата, а когато новината е на два езика, да се знае кои два записа от таблицата са за тази новина и да се изобразят заедно в две клетки на реда. За да можем да го направим е нужно да се изпълни FULL JOIN, с което да се изведе производна таблица, в която имаме същите колони, но по два пъти (например id и id_en) и в тази производна таблица се попълват новините на всеки отделен ред, но този път българският и английският запис на една и съща новина са на един ред (данните от английския запис се попълват в колоните с разширение _en). MySQL за момента не поддържа FULL JOIN, затова имитирам такъв с комбинация от LEFT JOIN + RIGHT JOIN + UNION. Ето я и заявката
Примерен код
SELECT t1.id, t2.id AS id_en, t1.alias, t2.alias AS alias_en, t1.sectionid, t2.sectionid AS sectionid_en, t1.catid, t2.catid AS catid_en, t1.title, t2.title AS title_en, t1.introtext, t2.introtext AS introtext_en, t1.publish_up, t2.publish_up AS publish_up_en, t1.created_by, t2.created_by AS created_by_en, t1.modified, t2.modified AS modified_en
FROM (

SELECT id, alias, sectionid, catid, title, introtext, publish_up, created_by, modified
FROM d4p_content t
WHERE NOT right( alias, 3 ) = '-en'
) AS t1
LEFT JOIN (

SELECT id, alias, sectionid, catid, title, introtext, publish_up, created_by, modified
FROM d4p_content t
WHERE right( alias, 3 ) = '-en'
) AS t2 ON t2.alias = concat( t1.alias, '-en' )
WHERE t1.sectionid = '3'
AND t1.catid = '79'
UNION SELECT t1.id, t2.id AS id_en, t1.alias, t2.alias AS alias_en, t1.sectionid, t2.sectionid AS sectionid_en, t1.catid, t2.catid AS catid_en, t1.title, t2.title AS title_en, t1.introtext, t2.introtext AS introtext_en, t1.publish_up, t2.publish_up AS publish_up_en, t1.created_by, t2.created_by AS created_by_en, t1.modified, t2.modified AS modified_en
FROM (

SELECT id, alias, sectionid, catid, title, introtext, publish_up, created_by, modified
FROM d4p_content t
WHERE NOT right( alias, 3 ) = '-en'
) AS t1
RIGHT JOIN (

SELECT id, alias, sectionid, catid, title, introtext, publish_up, created_by, modified
FROM d4p_content t
WHERE right( alias, 3 ) = '-en'
) AS t2 ON t2.alias = concat( t1.alias, '-en' )
WHERE t2.sectionid = '5'
AND t2.catid = '80'

Този роман, колкото и да е грозен, работи, когато се изпълни през phpmyadmin или директно в mysql. В него, за да разбера дадена новина има ли си записи и на двата езика, използвам колоната alias, в която българските записи се попълват във формат news1, news2 и т.н., a английските - news1-en, news2-en и т.н., като трябва да се има предвид, че може да липсва съответен запис на някой от езиците и тогава в неговите клетки се записва NULL. Проблемът идва, когато извикам това в моя скрипт. Правя заявката по стандартния начин, като я завихрям и в цикъл, за да изведа всички редове в таблица
Примерен код
$newslist = "SELECT .........";
$newslist1 = mysql_query($newslist);
while($newslist2 = mysql_fetch_array($newslist1, MYSQL_ASSOC)) {
       echo "данните от изведения ред";
}

При това, при всяко минаване на цикъла се извиква следващият ред от производната таблица, която сме получили и би трябвало да се пълни масив $newslist2 с данните от този ред (id, id_en, title, title_en и т.н.). Да, но не съвсем. Масивът се пълни през позиция и в крайна сметка в масива имам данните само от колоните с разширение _en (което са данните за новината на английски), а данните от колоните без разширението (данните за новината на български), са празни. Казано иначе, полученият масив изглежда така
Примерен код
[id] =>
[id_en] => 60
[alias] =>
[alias_en] => news1-en
[sectionid] =>
[sectionid_en] => 5
[catid] =>
[catid_en] => 80
[title] =>
[title_en] => News 1
[introtext] =>
[introtext_en] => This is news 1
[publish_up] =>
[publish_up_en] => 2008-08-03 14:39:49
[created_by] =>
[created_by_en] => 62
[modified] =>
[modified_en] => 0000-00-00 00:00:00

Една и съща заявка, изпълнена през phpmyadmin или директно в mysql връща пълна таблица с всичките и позиции, тъй като в случая имаме новина, която има записи и на български и на английски, но изпълнена в моя скрипт, връща само половината стойности.
Питам за акъл, това някакъв недокументиран или малко известен бъг в php ли е (не намерих информация за такъв бъг), до настройка на php ли е или трябва да се използва съвсем друг подход в php кода или в mysql заявката, тъй като става някакво объркване в така изпълнения php при комбинация от LEFT JOIN + RIGHT JOIN + UNION? Все пак phpmyadmin е написан на php и там по някакъв начин това е реализирано. Какъв обаче е този начин?
Предварително благодаря за всякакви насоки и се извинявам за твърде обширното обяснение, което се получи. Кажете ми, ако съм пропуснал да обясня нещо или някъде не съм бил ясен.



Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Join + union заявка от php
« Отговор #1 -: Aug 10, 2008, 13:06 »
Наистина е роман '<img'>
Сега нямам време да го анализирам, но до колкото разбирам ти е нужно да направиш cross table.
Да кажем, че таблицата ти е такава:

table news_text
Примерен код
id | FK_news_id | text | lang


Имаш два езика - en и bg. Искаш да получиш такава таблица:
Примерен код
FK_news_id | id_bg | id_en | text_bg | text_en


Това се прави най-лесно ( и ефективно - без JOIN) така:

Примерен код
SELECT
        news_text.FK_news_id,
        IF (news_text.lang = 'bg', news.id, NULL) as id_bg,
        IF (news_text.lang = 'en', news.id, NULL) as id_en
        IF (news_text.lang = 'bg', news.text, NULL) as text_bg,
        IF (news_text.lang = 'en', news.text, NULL) as text_en
FROM
        news_text
GROUP BY
        news_text.FK_news_id


И по-удобно е да използваш mysql_fetch_assoc вместо mysql_fetch_array.

EDIT: Проведох примера към реален случай.
EDIT 2: Сега не мога да пробвам с MySQL, но с PGSQL такова нещо не можеш да направиш (малко по-стриктен е към SQL стандарта) - ако не става така, пробвай да сложиш всеки един от IF-овете в някаква агрегираща функция - прим. SUM()



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

edmon

  • Гост
Join + union заявка от php
« Отговор #2 -: Aug 10, 2008, 20:08 »
не че искам да знам за какво става въпрос(толкова много не мога'<img'>) ама когато  
зпочнат да се получават такива страшни работи...
амнайси заявки с амнайси сравнения, добавяния и тн....
по-добре лек ремонт на базата ако е възможен ...
или други промени '<img'>
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Join + union заявка от php
« Отговор #3 -: Aug 10, 2008, 22:00 »
Сега. Измислих съвсем друг подход към решението на задачата да знам кои записи от таблицата се отнасят към една и съща новина - правя един съвсем обикновен SELECT на всички записи, които съдържат news в alias и ги подреждам по alias. Така, записите за една и съща новина са винаги един под друг. След това изпълнявам една схема от 5 if-а, с които разбирам изведения ред къде трябва да застане. Общо взето съм доволен, ама и проектът не е толкова скъп, че да му отделям толкова труд. Аз затова използвам Joomla в случая, вместо да го изпиша от нулата, а, edmon, да промениш структурата на Joomla... излишна играчка е. Достатъчно трудоемко е да изпиша нов CMS за съдържанието на Joomla, според изискванията на клиента '<img'>
И все пак, все още съм заинтригуван да разбера защо се получава този проблем, когато използвам LEFT JOIN + RIGHT JOIN + UNION. Явно не съм обяснил достатъчно ясно, затова ще дам сега и нагледни примери. Имаме такава таблица
Примерен код
id  | title        | alias         | catid | sectionid | други
 59 | Новина 1 | news1      | 79     | 3           | ....
 60 | News 1    | news1-en | 80     | 5           | ....
 61 | Новина 2 | news2      | 81     | 3           | ....
 62 | News 3    | news3-en | 82     | 5           | ....

Със заявката на VladSun бихме получили това
Примерен код
id     | id_en | title         | title_en | alias    | alias_en   | и т.н.
 59    | NULL  | Новина 1 | NULL     | news1 | NULL        | .....
 NULL | 60     | NULL       | News 1  | NULL   | news1-en | .....
 61    | NULL  | Новина 2 | NULL     | news2 | NULL        | .....
 NULL | 62     | NULL       | News 3  | NULL   | news3-en | .....

А трябва да получим това
Примерен код
id     | id_en | title         | title_en | alias    | alias_en   | и т.н.
 59    | 60     | Новина 1 | News 1  | news1 | news1-en | .....
 61    | NULL  | Новина 2 | NULL     | news2 | NULL        | .....
 NULL | 62     | NULL       | News 3  | NULL   | news3-en | .....

Когато изпълним романа, който показах като заявка в phpmyadmin или директно в mysql сървъра, таблицата се подрежда точно така и, когато повикам ред 1, получавам следния масив
Примерен код
[id] => 59
[id_en] => 60
[title] => Новина 1
[title_en] => News 1
[alias] => news1
[alias_en] => news1-en
[catid] => 79
[catid_en] => 80
[sectionid] => 3
[sectionid_en] => 5

Но когато попълня масива в моя скрипт, той се попълва така
Примерен код
[id] =>
[id_en] => 60
[title] =>
[title_en] => News 1
[alias] =>
[alias_en] => news1-en
[catid] =>
[catid_en] => 80
[sectionid] =>
[sectionid_en] => 5

Това е. Дано сега е станало по-ясно за какво става дума. Вижда ми се много странно да не мога да използвам LEFT JOIN + RIGHT JOIN + UNION в заявка, изпълнена от php и затова ми се ще да разбера защо се получава така.
А за mysql_fetch_assoc, прав си VladSun, ама някакъв навик съм придобил и си го изписвам цялото без да се замислям, че има и по-кратък вариант. Трябва да се отуча от този навик '<img'>
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Join + union заявка от php
« Отговор #4 -: Aug 10, 2008, 22:13 »
Не си групирал според мен ...
GROUP BY в моята завка върши точно това, което казваш, че не се получава - трансформира "диагоналнaта" таблица (с редове с една единствена стойност на колона и NULL-ове на другите) в един ред.
Трябва да групираш по повтарящия се ключ в преводите.

ПП: Като го гледам тоя alias от тип varchar и в същото време е явно ключ в таблицата ... отврат '<img'>



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Join + union заявка от php
« Отговор #5 -: Aug 10, 2008, 22:25 »
Я направо да ти я напиша '<img'>

Примерен код
SELECT
        IF (right( alias, 3 ) <> '-en', id, NULL) as id_bg,
        IF (right( alias, 3 ) = '-en', id, NULL) as id_en,
        IF (right( alias, 3 ) <> '-en', title, NULL) as title_bg,
        IF (right( alias, 3 ) = '-en', title, NULL) as title_en
        .......
FROM
        news
GROUP BY
        left(alias, IF(INSTR(alias,'-') > 0, INSTR(alias,'-')-1, CHAR_LENGTH (alias)))


Мдам .... повръща ми се от char keys '<img'>



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

edmon

  • Гост
Join + union заявка от php
« Отговор #6 -: Aug 11, 2008, 09:49 »
аз имах предвид общо някакъв друг подход вообще...
като не може от базата от пхп, от подхода към заявките, и/или използване на временни таблици и тн ....
'<img'>
разбираш ква е идеята'<img'>
като не може от единия край почваш от другия



Активен

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Join + union заявка от php
« Отговор #7 -: Aug 11, 2008, 10:33 »
Цитат (edmon @ Авг. 11 2008,09:49)
аз имах предвид общо някакъв друг подход вообще...
като не може от базата от пхп, от подхода към заявките, и/или използване на временни таблици и тн ....
'<img'>
разбираш ква е идеята'<img'>
като не може от единия край почваш от другия

Най-добре едно View да си направи '<img'>
Или SP '<img'>

PS: neter, само не използвай тия луди JOIN-ове '<img'>



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Join + union заявка от php
« Отговор #8 -: Aug 11, 2008, 12:17 »
Не. Аз се отказах от лудите JOIN-ове и от всички други варианти. Ще си ползвам обикновения SELECT в комбинация с if-овете, за които споменах (тези if-ове са в php кода, а не в mysql заявката), стана прилично.
Значи, моята заявка се оказа твърде сложна за VIEW. Може би твоята заявка, VladSun, би влязла във възможностите на VIEW, обаче някъде се оплетох в нея. Наистина съм забравил да групирам, обаче сега и с групиранията получавам много грешен резултат - има много излишни редове, а редовете, които съдържат нужна информация, въобще по нищо не наподобяват редовете, които трябва да се получат. Явно ще трябва да почета още за изпълнението на такава заявка, защото досега не съм изпълнявал подобно нещо и явно някъде сериозно бъркам при изписването й. Но щом я предлагаш, значи явно действа, някъде има моя грешка.
Всъщност най-много ме вълнуваше и продължава да ме вълнува защо не мога да използвам комбинация от LEFT JOIN + RIGHT JOIN + UNION в моя скрипт или, по-точно, в mysql_fetch_assoc и как, аджеба, пичовете от phpmyadmin са се справили с въпроса, тъй като в phpmyadmin тази заявка се изпълнява без проблем?



Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

jivco_t

  • Напреднали
  • *****
  • Публикации: 22
    • Профил
Join + union заявка от php
« Отговор #9 -: Aug 11, 2008, 14:35 »
Един шашав view:)
Примерен код

CREATE OR REPLACE FORCE VIEW  "SERIAL_NUMBER_SEARCH_VIEW" AS

SELECT
   'WARRANTY CARD' TIP,
   PRODUCT_NAME PRODUCT_NAME,
   TEXTAREA SERIAL_NUMBER,
   CREATION_TIME GAR_KARTA_DATA,
   (SELECT NAME FROM CLIENT WHERE WC_WARRANTY_CARD.CLIENT_ID=CLIENT.ID) CUSTOMER_NAME,
   HASHSTRING GAR_KARTA_NO,
   WARRANTY WARRANTY_PERIOD,
   (SELECT ADDRESS FROM CLIENT WHERE WC_WARRANTY_CARD.CLIENT_ID=CLIENT.ID) CUSTOMER_ADDRESS,
   (SELECT CONTACT_PERSON FROM CLIENT WHERE WC_WARRANTY_CARD.CLIENT_ID=CLIENT.ID) CUSTOMER_CONTACT,
   (SELECT PHONE FROM CLIENT WHERE WC_WARRANTY_CARD.CLIENT_ID=CLIENT.ID) CUSTOMER_PHONE,
   (SELECT MOBILE FROM CLIENT WHERE WC_WARRANTY_CARD.CLIENT_ID=CLIENT.ID) CUSTOMER_MOBILE,
   (SELECT FAX FROM CLIENT WHERE WC_WARRANTY_CARD.CLIENT_ID=CLIENT.ID) CUSTOMER_FAX,
   (SELECT EMAIL FROM CLIENT WHERE WC_WARRANTY_CARD.CLIENT_ID=CLIENT.ID) CUSTOMER_EMAIL,
   (SELECT MACONOMY_ID FROM CLIENT WHERE WC_WARRANTY_CARD.CLIENT_ID=CLIENT.ID) CUSTOMER_MACONOMY_ID,
   CLIENT_ID CUSTOMER_ID
FROM WC_WARRANTY_CARD

UNION

SELECT
   'SERVICE ORDER',
   ARTICLE_NAME,
   ARTICLE_SERIAL_NO,
   WARRANTY_CARD_DATE,
   (SELECT NAME FROM CLIENT WHERE ORDER_DETAILS.CLIENT_ID=CLIENT.ID),
   WARRANTY_CARD_NO,
   WARRANTY_CARD_DEADLINE,
   (SELECT ADDRESS FROM CLIENT WHERE ORDER_DETAILS.CLIENT_ID=CLIENT.ID),
   (SELECT CONTACT_PERSON FROM CLIENT WHERE ORDER_DETAILS.CLIENT_ID=CLIENT.ID),
   (SELECT PHONE FROM CLIENT WHERE ORDER_DETAILS.CLIENT_ID=CLIENT.ID),
   (SELECT MOBILE FROM CLIENT WHERE ORDER_DETAILS.CLIENT_ID=CLIENT.ID),
   (SELECT FAX FROM CLIENT WHERE ORDER_DETAILS.CLIENT_ID=CLIENT.ID),
   (SELECT EMAIL FROM CLIENT WHERE ORDER_DETAILS.CLIENT_ID=CLIENT.ID),
   (SELECT MACONOMY_ID FROM CLIENT WHERE ORDER_DETAILS.CLIENT_ID=CLIENT.ID),
   CLIENT_ID
FROM ORDER_DETAILS

UNION

SELECT
   'SERVICE REPLACE',
   NAME,
   SERIAL_NO,
   (SELECT WARRANTY_CARD_DATE FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID),
   (SELECT NAME FROM CLIENT WHERE (SELECT CLIENT_ID FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID)=CLIENT.ID),
   (SELECT WARRANTY_CARD_NO FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID),
   (SELECT WARRANTY_CARD_DEADLINE FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID),
   (SELECT ADDRESS FROM CLIENT WHERE (SELECT CLIENT_ID FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID)=CLIENT.ID),
   (SELECT CONTACT_PERSON FROM CLIENT WHERE (SELECT CLIENT_ID FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID)=CLIENT.ID),
   (SELECT PHONE FROM CLIENT WHERE (SELECT CLIENT_ID FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID)=CLIENT.ID),
   (SELECT MOBILE FROM CLIENT WHERE (SELECT CLIENT_ID FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID)=CLIENT.ID),
   (SELECT FAX FROM CLIENT WHERE (SELECT CLIENT_ID FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID)=CLIENT.ID),
   (SELECT EMAIL FROM CLIENT WHERE (SELECT CLIENT_ID FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID)=CLIENT.ID),
   (SELECT MACONOMY_ID FROM CLIENT WHERE (SELECT CLIENT_ID FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID)=CLIENT.ID),
   (SELECT ID FROM CLIENT WHERE (SELECT CLIENT_ID FROM ORDER_DETAILS WHERE ORDER_REPLACE.ORDER_ID=ORDER_DETAILS.ID)=CLIENT.ID)
FROM ORDER_REPLACE
/
Активен

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Join + union заявка от php
« Отговор #10 -: Aug 12, 2008, 13:13 »
Цитат (neter @ Авг. 11 2008,12:17)
Значи, моята заявка се оказа твърде сложна за VIEW. Може би твоята заявка, VladSun, би влязла във възможностите на VIEW, обаче някъде се оплетох в нея. Наистина съм забравил да групирам, обаче сега и с групиранията получавам много грешен резултат - има много излишни редове, а редовете, които съдържат нужна информация, въобще по нищо не наподобяват редовете, които трябва да се получат.

Дай да я видим твоята заявка '<img'>
И какво означава "моята заявка се оказа твърде сложна за VIEW" - няма ограничения към VIEW-то.

А за това, че не се изпълнява от PHP кода ти - не можеш ли да Trace-неш какво се изпълнява в DB engina-a.
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

senser

  • Напреднали
  • *****
  • Публикации: 1328
    • Профил
Join + union заявка от php
« Отговор #11 -: Aug 12, 2008, 20:24 »
може би е малко извън темата, но ми се струва, че за конкретния случай CakePHP framework  ще е много подходящ
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Join + union заявка от php
« Отговор #12 -: Aug 14, 2008, 15:54 »
Опа, малко се отплеснах и забравих да отговоря '<img'> Моята заявка е тази от първия ми пост на първа страница (романът, онзи с лудите JOIN-ове). При изпълнение на тази заявка във VIEW ми връща грешка "View's SELECT contains a subquery in the FROM clause", което си е точно така. Може въпросната заявка да се разбие в няколко подVIEW-та (ако може така да се каже), но започвам да губя смисъла от такова изпълнение. Системата от if-ове в php кода, която направих за целта си върши бързо и добре работата и така един прост SELECT е достатъчен. senser, ще го разгледам някой път този framework, може да е хубав, но по-натам, че много неща ми се струпаха сега. Аз така или иначе измислих вече решение как да заобиколя проблема и затова вече не става дума за намиране на решение за изпълнение на задачата, аз вече я изпълних тази задача.
Единственият ми въпрос е защо се получава това непълно попълване на масива при изпълнение на заявка от LEFT JOIN + RIGHT JOIN + UNION (заявката от първия ми пост на първа страница). А иначе съм погледнал целия път на процеса и виждам, че голямата заявка се изпълнява, производната таблица се създава във вида, в който я искам, но в клетките й се попълват само данните през колона. Другите колони също се създават, задават им се имена, но за редовете по-надолу получават празни стойности.
Та... не търся алтернативно решение на заявката с LEFT JOIN + RIGHT JOIN + UNION, защото вече съм намерил такова, а търся отговор защо се получава този проблем при изпълнението на такава заявка от mysql_fetch_assoc '<img'>
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Join + union заявка от php
« Отговор #13 -: Aug 14, 2008, 16:36 »
хехе '<img'>
http://bugs.mysql.com/bug.php?id=16757

2 години са си наистина много време ...

нетер - дъмп-ни query string-a който пращаш от PHP-то и виж дали с него заявката в MySql конзолата се изпълнява ОК.
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Join + union заявка от php
« Отговор #14 -: Aug 14, 2008, 17:42 »
Мда, четох го и аз това за 2-те години '<img'>

Значи, както писах вече, същата заявка се изпълнява без проблем в mysql конзолата и в phpmyadmin. И на двете места се връщат коректни стойности.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
BitchX auto join в отделни прозорци
Настройка на програми
empty 0 1723 Последна публикация Feb 13, 2004, 23:26
от empty
Banana Union
Хумор
nifelheim 0 1764 Последна публикация Mar 16, 2005, 21:16
от nifelheim
Специфична sql заявка - select + join
Web development
thc 4 5255 Последна публикация Oct 27, 2006, 19:38
от thc
Linux join-at v domain win2003
Кошче
badore 0 1944 Последна публикация Jan 04, 2007, 11:55
от badore
Join to domain
Хардуерни и софтуерни проблеми
runtime 8 3479 Последна публикация Feb 25, 2010, 11:01
от runtime