Jump to content
php.lv forumi

Ierakstu meklēšana no 2 tabulu nosacijumiem


azpage

Recommended Posts

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

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 by bubu
Link to comment
Share on other sites

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

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 by azpage
Link to comment
Share on other sites

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

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

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

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

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

×
×
  • Create New...