azpage Posted May 20, 2005 Report Share Posted May 20, 2005 Nosaukums nav ipashi labs, bet nu ne tas ir galvenais. Ir 3 tabulas, kuru struktūras ir šādas: 1. tabula ieraksti id title text 2. tabula vert1 id ier_id vert1_config_id value 3.tabula vert1_config id name Merkis ir sameklet visus tos ierakstus no tabulas "ieraksti" (sk. 1.tabula) un izvadīt lauku "title", kuri satur lietotāja izvēlētas vērtības tabulā "vert1" (sk. 2.tabula) no visām iespējamām vērtībām, kas ir iepriekš nodefinētas tabulā "vert1_config" (sk. 3.tabula). Piemērs: 1.tabula sastāv no šādiem ierakstiem: 1 | "pimers1" | "teksta piemers" 2 | "vertibu kopa" | "nav teksta" 2.tabula sastāv no šādiem ierakstiem: 1 | 1 | 2 | "aaaa" 2 | 1 | 3 | "10" 3 | 2 | 1 | "ccccccccc" 4 | 2 | 3 | "vvvvvv" 3.tabula sastāv no šādiem ierakstiem: 1 | vertiba1 2 | cita vertiba 3 | nezinama vertiba Atverot lapu paradās visas iepriekš nodefinētās vērtības no tabulas "vert1_config" (sk. 3.tabula) ar "checkboxiem" Kā lai izveidoju vaicājumu, kas atgriež lauku "title" no tabulas "ieraksti" (sk. 1.tabula), kam pieder lietotāja izvēlētās vērtības. Piemēram es atķeksēju vērtības: "vertiba1" un "nezinama vertiba". Rezultātām jābūt ierakstam ar virsrakstu "vertibu kopa" ar ID numuru 2, kaut vai ieraksts ar ID 1 ar satur vienu no šām vērtībām, tātad vajag, lai ieraksts saturētu visas lietotāja izvēlētās vērtības. Mēģināju visādi, taču nav izdevies. Viens no mēģinājuma piemēriem: SELECT id, title FROM ieraksti AS a, vert1 AS b WHERE a.id=b.ier_id AND b.vert1_config_id=1 AND b.vert1_config_id=3 Šis pieprasījums neatgriež neko, ja ieliek starp vērtību ID numuriem OR tad izvadās abi, kaut vai abi nesatur visas lietotāja izvēlētās vērtības. Lūdzu palīdziet izveidot nepieciešamo vaicājumu, vai vismaz lūdzu pasakiet adreses, kurās verētu būt noderīga informācija, lai atrisinātu šo problēmu. Link to comment Share on other sites More sharing options...
bubu Posted May 20, 2005 Report Share Posted May 20, 2005 (edited) Ja pareizi sapratu, tad: SELECT ieraksti.title FROM ieraksti JOIN vert1 ON ieraksti.id = vert1.ier_id WHERE vert1.vert1_config_id IN (1,2,3,4,5,...) Tajās iekavās saliec tos vajadzīgos ID atdalītus ar komatiem. Ā nē laikam nepareizi sapratu, vajag no otrās tabulas izvēlēties tikai tos ierakstus, kuriem trešajā tabulā ir piesaistītie ID ir virskopa ieķeksētajiem čekbokšiem, ja? Edited May 20, 2005 by bubu Link to comment Share on other sites More sharing options...
azpage Posted May 20, 2005 Author Report Share Posted May 20, 2005 SELECT ieraksti.title FROM ieraksti JOIN vert1 ON ieraksti.id = vert1.ier_id WHERE vert1.vert1_config_id IN (1,2,3,4,5,...) Šis vaicājums nestrādā, nupat parbaudīju, tiek izvadīti abi ieraksti "piemers1" un "vertibu kopa", taču, ja iekš iekavam ir "1,3", tav vajdzēja izvadīt tikai ierakstu ar ID 2 ("vertibu kopa") nevis abus. Meginaju iekavas ar AND aizvietot, sanaca tas pats, kas maneja iepriekšējā vaicājumā bez JOIN - neizvada nevienu ierakstu. Link to comment Share on other sites More sharing options...
bubu Posted May 20, 2005 Report Share Posted May 20, 2005 (edited) Vai ir MySQL >=4.1? tb vai subselektus drīkst izmantot? Edited May 20, 2005 by bubu Link to comment Share on other sites More sharing options...
azpage Posted May 20, 2005 Author Report Share Posted May 20, 2005 (edited) Versija ir 4.1.7, taakaa jaavar Problēma ir tā, ka tiek izvadīti visi ieraksti, kam vismaz viena vert1 ir tāda, kura norādīta iekavās, taču man vajag lai atbilstu visām vērtībām. Piem uzdevums no dzīves, datubāzē ir dažādu datoru ar/bez printeriem, ar/bez monitoriem utt). Es mekleeshanaa izvelos ka man vajag lai paraada visus datorus kuri ir ar printeriem un monitoriem, un tad arii japaraada visus datorus kam ir shis komponentes, nebus pareizi ja tiks paradits dators kam ir monitors bet nav printeris Edited May 20, 2005 by azpage Link to comment Share on other sites More sharing options...
bubu Posted May 20, 2005 Report Share Posted May 20, 2005 (edited) ai nē nepareizi.. jāpadomā vēl :) Edited May 20, 2005 by bubu Link to comment Share on other sites More sharing options...
smarty Posted May 20, 2005 Report Share Posted May 20, 2005 (edited) select no select ir laba manta :) Edited May 23, 2005 by smarty Link to comment Share on other sites More sharing options...
azpage Posted May 20, 2005 Author Report Share Posted May 20, 2005 Eju visiem foruma postiem cauri un citam lapam, liekas ka tas nav realizejams. Tachu manupraat ir daudz lapas, kur tiek atrastas piem atputas vietas, kuras tiek pievadati visi lietotaja izveletie pakalpojumi. Link to comment Share on other sites More sharing options...
bubu Posted May 20, 2005 Report Share Posted May 20, 2005 Laikam šitā: SELECT ieraksti.title FROM ieraksti, (SELECT COUNT(*) AS sk FROM vert1 WHERE id=ieraksti.id AND vert1_config_id IN (1,3,6,9,...) ) cnt WHERE cnt.sk=$cnt $cnt - unikaalo id skaits (piemēram priekš 1,3,6,9 = 4) tur daudzpunktē samet visus ieķeksētos chekbokšiem piesaistītos id no 3 tabulas (tāpat kā iepriekš). Link to comment Share on other sites More sharing options...
azpage Posted May 22, 2005 Author Report Share Posted May 22, 2005 Nestraadaa man arii tas, tur tiesham viss ir pareizi, nevjag tur nekur AS pec taa subselecta iekavaas. Es uzrakstiju shaadi : $query = 'SELECT ieraksti.title AS title FROM ieraksti, (SELECT COUNT(*) AS sk FROM vert1 WHERE ier_id=ieraksti.id AND vert1_config_id IN (1,3)) AS cnt WHERE cnt.sk=2'; Shis vaicaajums nestradaa, kur te varetu but kluuda, shadus vaicajumus nesmu veidojis tadel nezinu :( Link to comment Share on other sites More sharing options...
bubu Posted May 22, 2005 Report Share Posted May 22, 2005 AS nevajag pirms tabulu aliasa, AS var likt pirms kolonu aliasa (bet tas arī ir neobligāti). A nestrādā tas ir kā? Neatgriež neko, vai kļūdu? Link to comment Share on other sites More sharing options...
azpage Posted May 22, 2005 Author Report Share Posted May 22, 2005 Atgriež ķļūdu: mysql_fetch_assoc(): supplied argument is not a valid MySQL result Link to comment Share on other sites More sharing options...
azpage Posted May 22, 2005 Author Report Share Posted May 22, 2005 AS nevajag pirms tabulu aliasa, AS var likt pirms kolonu aliasa (bet tas arī ir neobligāti).17800[/snapback] Nesapratu sho iisti, vai tad nevar rakstiit piem: SELECT a.* FROM ieraksti AS a, vert1 AS b Shaadi man vienmer ir stradajis viss Link to comment Share on other sites More sharing options...
bubu Posted May 22, 2005 Report Share Posted May 22, 2005 Atgriež ķļūdu: mysql_fetch_assoc(): supplied argument is not a valid MySQL result 17801[/snapback] Tādos gadījumos jāizdrukā mysql_error() fjas rezultāts. Nesapratu sho iisti, vai tad nevar rakstiit piem:SELECT a.* FROM ieraksti AS a, vert1 AS b Var likt tos AS ja grib. Es kautkā pieradis nelikt, nezinu kāpēc. Tb es pie kolonnu aliasiem lieku tos AS, pie tabulu nē. Neatceros kāpēc tā esmu iemācījies :) Link to comment Share on other sites More sharing options...
azpage Posted May 22, 2005 Author Report Share Posted May 22, 2005 Unknown table 'ieraksti' in where clause, cik saprotu tas ir subvaicajumaa. Kad pielieku tabulu ieraksti klat subvaicajumaa, tad kludu nav bet neizvada neko. Link to comment Share on other sites More sharing options...
Recommended Posts