Autor Zpráva
napoj
Profil *
Ahoj, prosimvas uz si vubec nevim rady. Na locahlostu mam MySQL: 5.0.45-community-nt, tam funguje vse jak ma. Na serveru je napsano toto: "Používaný MySQL modul v PHP je kompilována pro MySQL 5.0.45 a server používá verzi 4.0.27. Toto může způsobit problémy."
Mam tady tento kod:
SELECT 'uzivatele'zdroj, IF( k.hodnota != ''
OR k.sleva_kod = 'CZ2031000', 'Ano', 'Ne' ) AS pouzito, u.jmeno, u.prijmeni, j.zaplaceno, k.id_kod, k.sleva_kod, k.sleva, NULL firma, NULL id_indiv, k.hodnota
FROM uzivatelske_kody k, objednavky j, uzivatele u
WHERE k.id_kod = j.id_kod
AND j.id_uziv = u.id_uziv
UNION ALL SELECT 'individualni_kon', IF( k.hodnota != ''
OR k.sleva_kod = 'CZ2031000', 'Ano', 'Ne' ) AS pouzito, NULL , NULL , i.zaplaceno, k.id_kod, k.sleva_kod, k.sleva, i.firma, i.id_indiv, k.hodnota
FROM uzivatelske_kody k, individualni_kon i
WHERE k.id_kod = i.id_kod
UNION ALL SELECT 'uzivatelske_kody', IF( k.hodnota != ''
OR k.sleva_kod = 'CZ2031000', 'Ano', 'Ne' ) AS pouzito, NULL , NULL , NULL , k.id_kod, k.sleva_kod, k.sleva, NULL , NULL , k.hodnota
FROM uzivatelske_kody k
WHERE k.id_kod NOT 
IN (

SELECT id_kod 
FROM individualni_kon
UNION SELECT id_kod
FROM objednavky
)

Jak jsem jiz rikal, na localhostu vse krasne bezi, ale na serveru mi vypise hlasku "#1064 - Va-Bše syntaxe je nějaká divná bl-Bízko 'SELECT id_kod
FROM individualni_kon
UNION SELECT id_kod
FROM ob' na řádku 16 "
Ja uz si opravdu navim rady. Predem dekuji za odpovedi.
joe
Profil
A funguje dotaz, když je v IN jen jeden dotaz, bez UNION?

---

Jinak tento zápis je správný? Vidím to poprvé...
SELECT 'uzivatele'zdroj ...?
napoj
Profil *
jj to funguje, funguje to i kdyz odstranim
NOT 
IN (

SELECT id_kod 
FROM individualni_kon
UNION SELECT id_kod
FROM objednavky
)
Alphard
Profil
pokud vím, starší verze nezvládají takovéto subdotazy
budete to asi muset obejít spojením
napoj
Profil *
Mohl byste mi to prosim nekdo ukazat? ja uz dneska opravdu vubec nevim co s tim :(
joe
Profil
Nevim jak to myslel Alphard, ale dalo by se to obejít i takhle asi
NOT 
IN (SELECT id_kod  FROM individualni_kon)
AND NOT IN(SELECT id_kod FROM objednavky)


Možná s OR, logický myšlení mám teď úplně jinde:-)
napoj
Profil *
bohuzel, toto nefunguje :(
#1064 - Va-Bše syntaxe je nějaká divná bl-Bízko 'SELECT id_kod FROM individualni_kon)
OR NOT IN(SELECT id_kod FR' na řádku 14
Alphard
Profil
Nevim jak to myslel Alphard, ale dalo by se to obejít i takhle asi
tak, jak jsem napsal
poddotazy jsou podporovány od verze 4.1, kdo nevěří viz manuál

napoj
nezlobte se, ale momentálně nemám náladu přepisovat ten dotaz, není to úplně triviální
krom toho, 4.0.27 je vykopávka, uvožoval bych o změně hostingu, mohou se objevit i jiné problémy
joe
Profil
Alphard
už jsem to pochopil... Myslel jsem, že jde nějak spojit ty dva dotazy jinak, ale to by stejně nemělo význam, protože nefunguje ani to, co jsem napsal já...

napoj
Místo toho poddotazu to napsat bez něj, spojením, s použitím join. Snad takhle to bylo myšleno.
napoj
Profil *
Kdyz pouziji jon, tak se vytvori plno nepotrebnych dat (zacne se vsechno se vsim ruzne kombinovat) a z nynejsich 10 zaznamu se vypise plno dalsich. Tomu jsem chtel prave zabranit tim UNION dlouho jsem to patlal do sebe az mi to na localu fungovalo, pak jsem to hodil na server a bylo po radosti :(
Mohl by mi prosim nekdo pomoct vytvorit tento dotaz?
Kajman_
Profil *
SELECT 'uzivatelske_kody', IF( k.hodnota != ''
OR k.sleva_kod = 'CZ2031000', 'Ano', 'Ne' ) AS pouzito, NULL , NULL , NULL , k.id_kod, k.sleva_kod, k.sleva, NULL , NULL , k.hodnota
FROM uzivatelske_kody k
WHERE k.id_kod NOT 
IN (
SELECT id_kod 
FROM individualni_kon
UNION SELECT id_kod
FROM objednavky
);

SELECT 'uzivatelske_kody', IF( k.hodnota != ''
OR k.sleva_kod = 'CZ2031000', 'Ano', 'Ne' ) AS pouzito, NULL , NULL , NULL , k.id_kod, k.sleva_kod, k.sleva, NULL , NULL , k.hodnota
FROM objednavky o right join uzivatelske_kody k on (k.id=o.id_kod) left join individualni_kon i on (k.id=i.id_kod) where o.id_kod is null and i.id_kod is null;


Ale doporučuji vydupat si novější mysql, jak radí ostatní!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: